requestAnimationFrame()函数保姆式讲解

        今天遇到requestAnimationFrame()函数;有很多疑问,它是不是会像循坏调用一样,调用它的回调函数?

      上代码,来解析;(代码来自百度找的案例--requestAnimationFrame简单用法_requestanimationframe用法_胜玲龙的博客-CSDN博客);

   

let a = aaa;
    let flag = true;
    let left = 0;
    function renders() {
        if(flag){
            left >= 100 && (flag = false)
            a.style.left = ` ${left++}px`
        } else {
            left <= 0 && (flag = true)
            a.style.left = ` ${left--}px`
        }
    }

    //requestAnimationFrame效果
    (function animateloop() {
        renders();
        window.requestAnimationFrame(animateloop);
    })();

MDN:是这样解释的

     window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行;

   初见上面的代码,由于我浅薄的见解,认为window.requestAnimationFrame(animateloop)--就像宏任务setTimout()一样在一定的时间重复调用它的回调函数

    所以有以下测试

      

  function renders() {

            if (flag) {

                left >= 100 && (flag = false)

                a.style.left = ` ${left+=100}px`

            } else {

                left <= 0 && (flag = true)

                a.style.left = ` ${left--}px`

            };

        }

        window.requestAnimationFrame(renders);

       发现--函数仅仅被调用一次;(排除window.requestAnimationFrame()和setTimeout一样的想法);

    然后在某个博客上看到如下一句话:

      注意:若你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用window.requestAnimationFrame();

    这就让我恍然大悟----结合概念:requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。;

    我对上面的代码的理解就是,window.requestAnimationFrame(x);它不会像setTimeout();那样循环自己,window.requestAnimationFrame()的循环式通过递归进行的;;它的核心就是概念说的---requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。;

   原来是刚开始就理解有偏差了,!!!!

  对于更加详细的requestAnimationFrame()函数的使用可以参考博客:requestAnimationFrame简单用法_requestanimationframe用法_胜玲龙的博客-CSDN博客

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值