Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何设置此路径的动画?_Javascript_Html_Html5 Canvas - Fatal编程技术网

Javascript 如何设置此路径的动画?

Javascript 如何设置此路径的动画?,javascript,html,html5-canvas,Javascript,Html,Html5 Canvas,我是HTML5的新手。 我在画布上绘制了一条路径,但我希望该路径能够设置动画,而不是立即闪烁。我怎样才能做到 下面是JS代码: $('#draw').click(function() { var a,b; a=b=5; context.clearRect(0, 0, 500, 500); context.moveTo(centerx, centery); context.beginPath(); context.strokeStyl

我是HTML5的新手。 我在画布上绘制了一条路径,但我希望该路径能够设置动画,而不是立即闪烁。我怎样才能做到

下面是JS代码:

$('#draw').click(function() {
     var a,b;
     a=b=5;

     context.clearRect(0, 0, 500, 500);

     context.moveTo(centerx, centery);
     context.beginPath();
     context.strokeStyle = "#000"; 
     for (i = 0; i < 120; i++) {
          angle = 0.1 * i;
          x = centerx + (a + b * angle) * Math.cos(angle);
          y = centery + (a + b * angle) * Math.sin(angle);
          context.lineTo(x, y);  
          context.stroke();
      }

 });
$('#draw')。单击(函数(){
变量a,b;
a=b=5;
clearRect(0,0500500);
上下文。移动到(centerx、centery);
context.beginPath();
context.strokeStyle=“#000”;
对于(i=0;i<120;i++){
角度=0.1*i;
x=中心x+(a+b*角度)*数学cos(角度);
y=中心y+(a+b*角度)*数学sin(角度);
lineTo(x,y);
stroke();
}
});
到目前为止,我所尝试的:

使用了
setInterval()
setTimeout()
这两种方法都无效。尝试为路径渲染和计算x和y值创建不同的函数,但也没有成功!同样根据文档,在调用
context.stroke()
之前,不会绘制路径,这让我想知道是否可以制作动画

编辑::jsiddle链接

要创建动画,您需要递归地绘制螺旋的一部分,并最终在某个点爆发

绘制此类动画的最佳方法是
window.requestAnimationFrame
,但也可以使用
setIterval
setTimeout
进行绘制

例如:

var i = 0;
function render(){
   i++;
   angle = 0.1 * i;
   x = centerx + (a + b * angle) * Math.cos(angle);
   y = centery + (a + b * angle) * Math.sin(angle);
   context.lineTo(x, y);  
   context.stroke();
   if (i <720)
    requestAnimationFrame(render);
  }
requestAnimationFrame(render);//start animation
var i=0;
函数render(){
i++;
角度=0.1*i;
x=中心x+(a+b*角度)*数学cos(角度);
y=中心y+(a+b*角度)*数学sin(角度);
lineTo(x,y);
stroke();

如果(i要创建动画,您需要递归地绘制一段螺旋,并最终在某个点爆发

绘制此类动画的最佳方法是
window.requestAnimationFrame
,但也可以使用
setIterval
setTimeout
进行绘制

例如:

var i = 0;
function render(){
   i++;
   angle = 0.1 * i;
   x = centerx + (a + b * angle) * Math.cos(angle);
   y = centery + (a + b * angle) * Math.sin(angle);
   context.lineTo(x, y);  
   context.stroke();
   if (i <720)
    requestAnimationFrame(render);
  }
requestAnimationFrame(render);//start animation
var i=0;
函数render(){
i++;
角度=0.1*i;
x=中心x+(a+b*角度)*数学cos(角度);
y=中心y+(a+b*角度)*数学sin(角度);
lineTo(x,y);
stroke();

如果(我可以发布一个例子小提琴吗?你可以发布一个例子小提琴吗?非常感谢:)我试了几个小时:/btw你能给我一些好的链接来理解画布吗?非常感谢:)我试了几个小时:/btw你能给我一些好的链接来理解画布吗?