Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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 HTML画布-使动画一次发生一个,而不是同时发生多个_Javascript_Animation_Canvas - Fatal编程技术网

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

Javascript HTML画布-使动画一次发生一个,而不是同时发生多个,javascript,animation,canvas,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 (angl

我有一个函数,可以根据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完全旋转

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