HTML Canvas - 使动画一次发生一次,而不是同时发生多次

时间:2015-02-11 02:20:21

标签: javascript animation canvas

我有一个功能,可以按照“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);
            });

        }
    }

如果我在其他地方多次调用该函数,动画会混合在一起,而不是在下一个动画开始之前完成第一个动画。如何让它在下一个电话开始之前完成第一个电话?

1 个答案:

答案 0 :(得分:0)

创建一个数组并将对象推送到数组的末尾。

每个对象都包含imageObj,angleTurned&amp;的属性。 totalAngle。

让requestAnimationFrame循环仅为数组中的第一个对象设置动画,直到第一个imageObj完全转动为止。

然后移开已完成的第一个数组元素并开始为新的第一个元素设置动画。