• requestAnimationFrame 控制速度模拟setinterval


    封装方法:
         var requestInterval = function (fn, delay) {
            var requestAnimFrame = (function () {
                return (
                  window.requestAnimationFrame ||
                  function (callback, element) {
                    window.setTimeout(callback, 1000 / 60);
                  }
                );
              })(),
              start = new Date().getTime(),
              handle = {};
            function loop(timeSpan) {
              handle.value = requestAnimFrame(loop);
              var current = new Date().getTime(),
                delta = current - start;
              if (delta >= delay) {
                fn.call(this,timeSpan);
                start = new Date().getTime();
              }
            }
            handle.value = requestAnimFrame(loop);
            return handle;
          };
    调用:
          requestInterval((...args) => {
            const element = document.getElementById("test");
            console.log(...args);
          }, 1000);

    停止:

    cancelAnimationFrame(timer.value);

    可以封装停止方法:

    var clearRequestInterval = function (handle) {
            window.cancelAnimationFrame
              ? window.cancelAnimationFrame(handle.value)
              : window.webkitCancelAnimationFrame
              ? window.webkitCancelAnimationFrame(handle.value)
              : window.webkitCancelRequestAnimationFrame
              ? window.webkitCancelRequestAnimationFrame(
                  handle.value
                ) /* Support for legacy API */
              : window.mozCancelRequestAnimationFrame
              ? window.mozCancelRequestAnimationFrame(handle.value)
              : window.oCancelRequestAnimationFrame
              ? window.oCancelRequestAnimationFrame(handle.value)
              : window.msCancelRequestAnimationFrame
              ? window.msCancelRequestAnimationFrame(handle.value)
              : clearInterval(handle);
          };

    参考:

    https://blog.csdn.net/cunqu9743/article/details/106998768/

    积累小的知识,才能成就大的智慧,希望网上少一些复制多一些原创有用的答案
  • 相关阅读:
    Linux下OpenSSL自签ssl证书
    戌蛤怒触铁铁树
    Python自动化办公-自动化操作Excell-openpyxl
    Python正则表达式
    Django中F查询
    如何知道自家的宽带是多少兆?
    ‘Diango中明明模版的名称写的是对的,但是访问url的时候发现没调用模版’解决方案
    Django中的聚合函数
    Django中的跨关系查询
    【RabbitMQ】零、Windows64位安装
  • 原文地址:https://www.cnblogs.com/llcdbk/p/14893294.html
Copyright © 2020-2023  润新知