【发布时间】:2018-10-08 15:48:09
【问题描述】:
我正在尝试使用 HTML 画布编写代码,该代码将在鼠标移动事件发生的地方创建一行。这条线有一个明确的方向,应该继续延伸,直到它离开屏幕。我遇到的问题是,每次我移动鼠标时都会开始一个新行(这很好),但前一行停止延伸。我认为问题是因为每个新行都采用一组与前一行同名的参数,但是我不确定这是问题所在,也不知道如何解决。
这是我当前代码的 jsfiddle:https://jsfiddle.net/tdammon/bf8xdyzL/
我开始创建一个名为 mouse 的对象,它接受 x 和 y 参数。 xbeg 和 ybeg 将是我的线条的起始坐标。
let canvas = document.querySelector('canvas');
canvas.width = window.innerWidth;
canvas.height= window.innerHeight;
let c = canvas.getContext('2d');
let mouse ={
x:undefined,
y:undefined,
}
window.addEventListener("mousemove",function(event){
mouse.x = event.x;
mouse.y = event.y;
xbeg = mouse.x;
ybeg = mouse.y;
})
接下来我创建一个不断调用自身的动画函数。我创建了一个新的线对象,它将以xbeg 和ybeg 参数作为起点,以xbeg+10 和ybeg+10 作为终点。然后该函数递增xbeg 和ybeg。我希望这个函数可以创建新的线条,只要鼠标移动就不会停止延伸。
function animate() {
requestAnimationFrame(animate);
new Line(xbeg,ybeg,xbeg+10,ybeg+10)
c.beginPath();
c.moveTo(xbeg,ybeg);
c.lineTo(xbeg+10,ybeg+10);
c.stroke();
xbeg += 1;
ybeg += 1;
}
【问题讨论】:
-
如果你想延长线条,你应该循环运行它们的
+= 1,直到它们到达画布的末端。 -
这不会阻止循环运行时创建新行吗?
-
您不会希望在循环运行时创建新行。不要让
.beginPath()发生,直到循环完成。除非您使用两个画布,否则您不能同时绘制两条线。此外,除非您测试鼠标移动之间的时间,否则这只会让一切都变黑。 -
@PHPglue 我认为我们对这里的最终产品有不同的想法。如果您关注 JS fiddle 链接,我只想保留相同的功能我不希望在移动鼠标时线条停止移动
标签: javascript canvas