html 实时曲线 js,javascript – 滑块移动时的html5-canvas绘图曲线

news/2024/7/5 19:15:18

嗨,我想在移动滑块时绘制曲线.我有两种曲线.贝塞尔曲线和二次曲线.当我绘制曲线时,我想在同一条路径上移动一个对象.我希望它是动态的,所以如果我能够改变曲线点.

所以我需要一个函数,我可以调用滑块更改,因为我正在为行做.

这是我的代码.此代码仅适用于chrome.

.wrapper {

margin: 0 auto;

width: 1000px;

}

.canHdr {

float: left;

width: 450px;

height: 400px;

border: 1px solid red;

}

This is my 1st div with quadratic curve I want to draw this curve as I move the slider. I want to make it dynamic so when I should be able to change the curve points. Also I want to move an object on that curve as I am doing in my 3rd div.

[No canvas support]

This is my 2nd div. I have bezier curve. I want to make it dynamic so when I should be able to change the curve points. Also I want to move an object on that curve as I am doing in my 3rd div.

[No canvas support]

This is my 3rd div with slanting line. I want to move a ball on this line when I move the slider. So as the line increases ball will also move on the line.

[No canvas support]

This is my 4th div with slanting line. I want to move a ball on this line when I move the slider. So as the line increases ball will also move on the line.

[No canvas support]

newSprite('myCanvas3', 16, 170);

quadraticCurve('myCanvas1', 18.8, 45, 28, 160, 228, 165);

bezierCurve('myCanvas2', 20, 75, 55.2, 150.0, 200,100, 228, 165)

function counterSlider(sID) {

var slideVal = document.getElementById(sID).value;

/*if (maxValue ==100){

slideVal=slideVal/100;

}*/

slideVal = slideVal / 100;

if (slideVal == 0) {

/* erase('myCanvas2');

erase('myCanvas3');

erase('myCanvas4');*/

//newSprite('myCanvas1b', 18.8, 45);

newSprite('myCanvas3', 16, 170);

} else if (slideVal > 0 && slideVal <= 34) {

/*erase('myCanvas1');

//erase('myCanvas1b');

erase('myCanvas2');

erase('myCanvas3');

erase('myCanvas4');*/

} else if (slideVal > 34 && slideVal <= 67) {

/*erase('myCanvas1');

erase('myCanvas2');

erase('myCanvas3');

erase('myCanvas4');*/

} else if (slideVal > 67 && slideVal <= 100) {

/*erase('myCanvas1');

erase('myCanvas2');

erase('myCanvas3');

erase('myCanvas4');*/

}

}

function erase(canvasId) {

var canvas = document.getElementById(canvasId);

var context = canvas.getContext("2d");

context.beginPath();

context.clearRect(0, 0, canvas.width, canvas.height);

canvas.width = canvas.width;

}

/**********for backgroundImage********************/

function quadraticCurve(canId, spx, spy, cpx, cpy, endx, endy) {

var canvas = document.getElementById(canId);

var ctx = canvas.getContext('2d');

ctx.beginPath();

ctx.moveTo(spx, spy);

ctx.quadraticCurveTo(cpx, cpy, endx, endy);

ctx.strokeStyle = "#eaca2d";

ctx.stroke();

}

function bezierCurve(canId, spx, spy, cpx1, cpy1, cpx2, cpy2, endx, endy) {

var canvas = document.getElementById(canId);

var ctx = canvas.getContext('2d');

ctx.beginPath();

ctx.moveTo(spx, spy);

ctx.quadraticCurveTo(cpx1, cpy1, cpx2, cpy2, endx, endy);

ctx.strokeStyle = "#eaca2d";

ctx.stroke();

}

function newSprite(canId, mvx, mvy) {

var canvas = document.getElementById(canId);

var ctx = canvas.getContext('2d');

ctx.globalCompositeOperation = 'source-over';

//ctx.globalCompositeOperation = "destination-over";

ctx.beginPath();

ctx.fillStyle = "#0077c1";

ctx.arc(mvx, mvy, 6, 0, Math.PI * 2, true);

ctx.closePath();

ctx.fill();

}

function drawSlopeCurve1(sID, maxValue) {

// erase('canvasTwo');

var canId = 'myCanvas4';

var slideVal = parseInt(document.getElementById(sID).value);

var canvas = document.getElementById(canId);

var context = canvas.getContext('2d');

canvas.width = canvas.width;

//line end points

x1 = 16;

y1 = 170;

x2 = 200;

y2 = 80;

//get slope (rise over run)

var m = (y2 - y1) / (x2 - x1);

//get y-intercept

var b = y1 - (m * x1);

//get distance between the two points

var distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));

//get new x and y values

var x = x1 + parseInt(distance / maxValue * slideVal);

var y = parseInt(m * x + b);

context.beginPath();

context.moveTo(x1, y1);

context.lineTo(x, y);

context.lineWidth = 0.6;

context.stroke();

newSprite(canId, x, y);

}

function drawSlopeCurve2(sID, maxValue) {

// erase('canvasTwo');

var canId = 'myCanvas3';

var slideVal = parseInt(document.getElementById(sID).value);

var canvas = document.getElementById(canId);

var context = canvas.getContext('2d');

canvas.width = canvas.width;

//line end points

x1 = 16;

y1 = 170;

x2 = 160;

y2 = 72;

//get slope (rise over run)

var m = (y2 - y1) / (x2 - x1);

//get y-intercept

var b = y1 - (m * x1);

//get distance between the two points

var distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));

//get new x and y values

var x = x1 + parseInt(distance / maxValue * slideVal);

var y = parseInt(m * x + b);

context.beginPath();

context.moveTo(x1, y1);

context.lineTo(x, y);

context.lineWidth = 0.6;

context.stroke();

newSprite(canId, x, y);

}

解决方法:

您应该首先在函数中定义曲线,以便计算每个x位置的图形应该结束的位置.然后你也知道在哪里绘制终点.

我的演示函数有一个在画布上绘制正弦的函数:

function calc(x){

var y = 100 + ( 50*Math.sin(x*400));

return y;

}

通过在点之间绘制一条线(不是曲线!)来获得图形.

for (var x=0; x<=400 && (x <= slider.value); x+=3){

y= calc(x);

ctx.lineTo(x, y);

}

添加了html5slider.js以使滑块在firefox中工作.

标签:javascript,html5-canvas

来源: https://codeday.me/bug/20190709/1409634.html


http://www.niftyadmin.cn/n/4637498.html

相关文章

html编写一个四则运算函数,加减乘除四则运算(javascript版)

加减乘除四则运算(javascript)1、调用方法&#xff1a;var str "134-5-6*7/89-10/11"; //具体的计算公式calcArith(str); //调用函数2、函数实现&#xff1a;//主调用函数function calcArith(strV) {if (("-*/").indexOf(strV.substring(0,1)) > 0) {s…

控制计算机桌面图标,(1)在桌面上显示“计算机”“控制面板”图标,然后隐藏“控制面板”图标。...

【单选题】( )。【单选题】即期外汇业务中汇率最高的是( )【单选题】下列说法正确的是【填空题】V型从V型从V型,____。【判断题】氢质子所处的化学环境对MR信号无影响。【问答题】请列出1949年新中国成立以来曾入选我国国家男、女篮球队各5~8名当时较著名核心后卫的名字。【多选…

计算机科学与技术考研难度排行,考研专业的难度排名

根据调查&#xff0c;考研难度系数由高到低排名依次有&#xff1a;医学、工程力学、会计、金融、法律、电子科学与技术专业、心理学、新闻传播学、计算机科学与技术、翻译&#xff0c;这些专业被列为最难考的专业。考研专业难度系数排行一、医学&#xff1a;医学专业毕业生可谓…

html tab顶部吸附,flutter,SliverPersistentHeader实现Tab顶部吸附固定效果

直接上代码啦import package:flutter/material.dart;class StickyDemo extends StatefulWidget {override_StickyDemoState createState() > _StickyDemoState();}class _StickyDemoState extends Statewith SingleTickerProviderStateMixin {TabController tabController;o…

计算机复试英语口试,英语口语练习_大连理工大学计算机复试经验_沪江英语

1月14、15两天考研初试&#xff0c;2月28日晚上大工的网站可以查初试成绩。3月24日报到&#xff0c;3月25日上午8:30--11:30复试笔试&#xff0c;下午16:30--16:55听力&#xff0c;3月26日 8:00--20:00面试&#xff0c;晚上11点左右总成绩公布。今年复试的总成绩是220&#xff…

计算机一级考试wps知识点,计算机一级WPSOffice考试常见知识点

计算机一级WPSOffice考试常见知识点由于计算机具有高运算速度和精度以及逻辑判断能力&#xff0c;因此出现了计算力学、计算物理、计算化学、生物控制论等新的学科。下面是小编整理的关于计算机一级WPSOffice考试常见知识点&#xff0c;希望大家认真阅读!个性化WPSOffice快捷键…

html网页id怎么改成名字,IG 改名字:教你如何更改 Instagram 帐号名称 ID 及个人档案姓名...

如果你当时办 Instagram 时乱取用户名称 ID&#xff0c;或者你不想让某人找到你的 IG 帐号&#xff0c;那么我们都可以透过「改名字」这招来实现&#xff0c;无论你想更改 IG 帐号 ID&#xff0c;或者是想更改个人档案上的姓名都可以。那么到底怎么改名字呢&#xff1f;本篇会分…

微型计算机逻辑组成框图,微机原理及应用习题库硬件应用设计题

微机原理及应用习题库硬件应用设计题 1 微机原理及应用 微型计算机系统概述 第一讲和第二讲 0.2 0.8 1 画出微型计算机应用硬件基本组成框图。 微机原理及应用 变量及伪指令 第 18讲 0.8 0.8 10 设变量var1的逻辑地址为0100&#xff1a;0000&#xff0c;画出下列语句定义的变量…