requestAnimationFrame语法糖处理动画---真香

废话不多说,直接上图上代码!!!!

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>requestAnimationFrame</title>
        <style type="text/css">
            #animate{
                width: 100px;
                height: 100px;
                background: red;
                position: absolute;
                left: 0;
                top: 0;
            }
        </style>
    </head>
    <body>
        <div id="root">
            <div id="animate"></div>
        </div>
        <script type="text/javascript">
            // window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。
            // 该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行
            // 语法:window.requestAnimationFrame(callback);
            // HTML5标准规定了setTimeout()的第二个参数的最小值(最短间隔),不得低于4毫秒,如果低于这个值,就会自动增加。在此之前,老版本的浏览器都将最短间隔设为10毫秒。
            // 另外,对于那些DOM的变动(尤其是涉及页面重新渲染的部分),通常不会立即执行,而是每16毫秒执行一次;
            let el = document.getElementById('animate'),
                flag= true,
                left = 0,
                requestAnimationFrameId = null
                
                function loop() {
                    if(flag === true){
                        if(left >= 200){
                            flag = false
                        }
                        el.style.left = ` ${left ++}px`
                    }else{
                        if(left <= 0){
                            flag = true
                        }
                        el.style.left = ` ${left --}px`
                    }
                }
                
                //requestAnimationFrame效果
                (function animloop() {
                    loop();
                    requestAnimationFrameId = requestAnimationFrame(animloop);
                    //如果left等于150 停止动画
                    // if(left === 150){
                    //     cancelAnimationFrame(requestAnimationFrameId)
                    // }
                })();
                
                //setInterval效果
                // setInterval(function(){
                //     loop()
                // },1000/60)
            
        </script>
    </body>
</html>

以上demo代码直接跑,即可演示requestAnimationFrame;

转载注明出处,谢谢合作!!!

posted @ 2021-02-04 18:48  鱼樱前端  阅读(143)  评论(0编辑  收藏  举报