zoukankan      html  css  js  c++  java
  • setTimeout、setInterval 和 requestAnimationFrame 之间的区别

    setTimeout和setInterval的区别:
    setTimeout()是延时器,setInterval()是定时器,setTimeout()在执行的时,是在载入后延迟指定时间后,去执行一次表达式,次数是一次,而setInterval()则不一样,它从载入后,每隔指定的时间就执行一次表达式

    setTimeout()
    setTimeout()用于延时执行参数指定的代码,如果在指定的延迟时间之前,想取消这个执行,可以用clearTimeout(timerId) timerId 是 setTimeout 时返回的;
    语法:
    var timerId = setTimeout(func|code, delay)
    code/function 必需。要调用一个代码串,也可以是一个函数。
    milliseconds 可选。执行或调用 code/function 需要等待的时间,以毫秒计。默认为 0。

        <button onclick="fun()">点我</button>
        <button onclick="myStopFunction()">阻止弹出</button>
     var timerId;
    
      function fun() {
                timerId = setTimeout(function () {
                    alert("Hello")
                }, 3000);
      }
    
     function myStopFunction() {
                clearTimeout(timerId);
     } 

    setInterval()

    setInterval()用于每隔一段时间执行指定的代码,永无停歇,想清除它,可以使用 clearInterval(intervalId),这样从调用 clearInterval intervalId 是 setInterval 时返回的;
    语法:
    setInterval(code, milliseconds);
    setInterval(function, milliseconds, param1, param2, ...)
    code/function 必需。要调用一个代码串,也可以是一个函数。
    milliseconds 必须。周期性执行或调用 code/function 之间的时间间隔,以毫秒计。

        <p>显示时间:<span id="date"></span></p>
        <button onclick="clearTime()">停止时间</button>
    

      

    var mTime = setInterval(function () {
                oTime()
            }, 1000);
    
            function oTime() {
                var date = new Date();
                var time = date.toLocaleTimeString();
                document.getElementById('date').innerHTML = time;
            }
    
            function clearTime() {
                clearInterval(mTime);
            }
    

      

    requestAnimationFrame(code)

    requestAnimationFrame(code),一般用于动画,与 setTimeout 方法类似,区别是 setTimeout 是用户指定的,而 requestAnimationFrame 是浏览器刷新频率决定的,一般遵循 W3C 标准,它在浏览器每次刷新页面之前执行。
    语法:
    window.requestAnimationFrame(callback);

    requestAnimationFrame 比起 setTimeout、setInterval的优势主要有两点:
    1、requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。
    2、在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,这当然就意味着更少的的cpu,gpu和内存使用量。

    注: IE9-浏览器不支持该方法

    <div style="border:1px solid #ddd; 500px;margin: 50px 0 10px;">
            <div id="box">0%</div>
        </div>
        <button id="btn">点击</button>
    

      

    var timer;
            btn.onclick = function () {
                box.style.width = '0';
                timer = requestAnimationFrame(function fn() {
                    if (parseInt(box.style.width) < 500) {
                        box.style.width = parseInt(box.style.width) + 5 + 'px';
                        box.innerHTML = parseInt(box.style.width) / 5 + '%';
                        timer = requestAnimationFrame(fn);
                    } else {
                        cancelAnimationFrame(timer);
                    }
                })
            }
    

      

  • 相关阅读:
    F. Beautiful Rectangle 构造
    D. Game with modulo 交互题
    2020牛客暑期多校训练营(第六场) Josephus Transform
    2020牛客暑期多校训练营(第五场) D Drop Voicing
    2020 Multi-University Training Contest 2 In Search of Gold
    ABP 仅配置权限
    Oracle 驱动安装
    电商 Python html格式访客数据转为excel格式的数据 html格式的excel转换为excel
    SQL Server 外键 使用与否
    SQL Server 字段类型 datetime2(7)
  • 原文地址:https://www.cnblogs.com/ling-nl/p/14245218.html
Copyright © 2011-2022 走看看