防抖和截流

2021-04-26  本文已影响0人  my木子

由来

防抖(debounce)

    /**
    * func 目标函数
    * delay 延迟执行毫秒数
    */
    function debounce(func, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;

        if (timer) {
          clearTimeout(timer);
        };
        timer = setTimeout(() => {
          func.apply(context, args);
        }, delay);
      };
    };

    function fun() {
      console.log("执行了");
    }

    window.addEventListener('mousemove', debounce(fun, 1000));

截流(throttle)

        /**
         * 第一种写法 定时器版
         * func 目标函数
         * delay 延迟执行毫秒数
         */
        function throttle(func, delay) {
            let timer;
            return function () {
                let context = this;
                let args = arguments;

                if (timer) {
                    return;
                };
                timer = setTimeout(() => {
                    func.apply(context, args);
                    timer = null;
                }, delay);
            };
        };

        function fun() {
            console.log("执行了");
        }

        window.addEventListener('mousemove', throttle(fun, 1000));

        /** 第二种写法 间戳版
         * func 目标函数
         * delay 延迟执行毫秒数
         */
        function throttle(func, delay) {
            let previous = 0;
            return function () {
                let context = this;
                let args = arguments;
                let now = new Date();
                if (now - previous > delay) {
                    func.apply(context, args);
                    previous = now;
                }
            };
        }

        function fun() {
            console.log("执行");
        }

        window.addEventListener('mousemove', throttle(fun, 1000));

requestAnimationFrame

上一篇 下一篇

猜你喜欢

热点阅读