HTML画布-使动画一次发生一个,而不是同时发生多个
HTML Canvas - Make animations happen one at a time, rather than multiple at the same time
我有一个函数,可以按"totalAngle"参数指定的量为图像旋转设置动画。该函数使用requestAnimFrame调用自己,直到动画完成。
function clockwise(imageObj, canvas, context, angleTurned, totalAngle) {
// only repeat if the angle turned is less than the total angle to be turned
if (angleTurned < totalAngle)
{
// turn
context.rotate(totalAngle / 180);
// update the angle
angleTurned += totalAngle / 180;
// clear the previous image
context.clearRect(0, 0, canvas.width, canvas.height);
// draw the new image
context.drawImage(imageObj, -imageWidth / 2, -imageHeight / 2, imageWidth, imageHeight);
// request new frame
requestAnimFrame(function() {
clockwise(imageObj, canvas, context, angleTurned, totalAngle);
});
}
}
如果我在其他地方多次调用该函数,动画会混合在一起,而不是在下一个开始之前完成第一个。如何在下一次通话开始前完成第一次通话?
创建一个数组并将对象推到数组的末尾。
每个对象都包含imageObj、angleTurned&totalAngle。
让requestAnimationFrame循环只为数组中的第一个对象设置动画,直到第一个imageObj完全旋转。
然后偏移已完成的第一个数组元素,并开始为新的第一个元素设置动画。
相关文章:
- 引导程序崩溃一次只能看到一个
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 一次又一次地在新的和相同的选项卡中打开一个url
- 如何在设定的时间间隔内一次只显示一个图像
- 复选框:一次只允许单击一个复选框
- 使用 JavaScript 一次为一个元素设置多个属性
- 一次显示一个隐藏指令-AngularJS
- 我可以使用JS一次使用JSON数组中的一个字符串吗
- 一次显示一个指令AngularJS
- 运行“;非“;单击另一个函数中的函数仅一次
- 复选框一次选中一个不在gridview中工作
- 复选框一次选中一个不起作用
- 什么'是从对象列表中一次编辑一个对象的正确Angular/Firebase方法
- 在一组复选框中,一次只允许选择一个
- Slding表单不会一次显示一个表单
- 每天递减一个变量一次 - Javascript
- 如何在下一次 AJAX 调用中访问从一个 AJAX 调用返回的变量
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- 重置功能,因此一次只有一个打开
- JavaScript-如何创建一个一次只能运行一次的函数