javascript - 间隔动画和requestAnimationFrame的区别

标签 javascript

这两者有什么区别? requestAnimationFrame 应该“间隔”或每 60 毫秒以 60fps 调用 cca(取决于屏幕),并且使用 setInterval 您可以设置函数调用的延迟间隔。 然而,我已经用 、interval 和 requestAnimationFrame 制作了简单的绘图动画,看起来interval 函数更平滑并且工作正常,而 requestAnimation 函数破坏了浏览器(在 mozilla/chrome 和 2 台电脑上测试)。

区间函数:

function animate(x) {
    var start = new Date();
    var id = setInterval(function () {
        var timepassed = new Date() - start;
        var progress = timepassed / x.duration;
        if (progress > 1) {
            progress = 1;
        }
        var delta = x.delta(progress);
        x.step(delta);
        if (progress == 1) {
            clearInterval(id);
        }
    }, x.delay);


}

requestAnimationFrame函数:

function animate(x) {
    var start = new Date();
    var id = function () {

        var timepassed = new Date() - start;
        var progress = timepassed / x.duration;
        if (progress > 1) {
            progress = 1;
        }
        var delta = x.delta(progress);

        x.step(delta);
        requestAnimationFrame(id);
        if (progress < 1) {
            requestAnimationFrame(id);
        }
    }
    requestAnimationFrame(id)


}

绘图函数

function move(delta) {
    var c = document.getElementById("myCanvas");


var ctx = c.getContext("2d");

    animate({
        delay:10,
        duration: 4000,
        delta: delta,
        step: function (delta) {
            ctx.clearRect(0, 0, c.width, c.height);
            ctx.beginPath();

            ctx.strokeStyle="red";
             ctx.lineWidth = 15;
ctx.arc(150, 150, 70, 0*Math.PI, delta*(2 * Math.PI));
            ctx.font="40px Georgia";
ctx.fillText((delta*100).toFixed(0)+"%",95,150);

ctx.stroke(); ;
        }


    });
}
move(function(p){return p});

间隔演示:http://jsfiddle.net/Trolstover/5tmu4j6z/ requestAnimationFrame 演示:http://jsfiddle.net/Trolstover/5tmu4j6z/1

最佳答案

直接注释掉即可

 //requestAnimationFrame(id);
        var timepassed = new Date() - start

看到这个:http://jsfiddle.net/5tmu4j6z/2/

关于javascript - 间隔动画和requestAnimationFrame的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30062850/

相关文章:

javascript - 如何检查用户是否可以在浏览器历史记录中前进?

javascript - 在 jQuery 中获取鼠标滚轮事件?

javascript - sqlite3 - 异步调用的 promise

javascript - 动态坐标谷歌地图无法加载

java - 网页重定向如何在此页面中工作?

javascript - 每个链接菜单下方的进度条

javascript - 对 Angular 指令进行单元测试

Javascript:单击一个 Accordion 时关闭所有 Accordion ?

javascript - 提取 json 文件中的最后一个值

javascript - amCharts:如何优雅地管理 dataLoader 中数据的缺乏