JavaScript

JS 节流

2019-02-21  本文已影响0人  云龙789
<script>
    /**
     *
     * @param idle number 空闲时间 单位毫秒
     * @param action 请求关联函数,实例用用需要调用的函数
     */
    // const debounce = (fn, time) => {
    //     let timeout;
    //
    //     return function () {
    //         const functionCall = () => fn.apply(this, arguments);
    //
    //         clearTimeout(timeout);
    //         timeout = setTimeout(functionCall, time);
    //     }
    // }
//  上面的 debounce  和下面的结果都是一样的
   let debounce =  function( fn,delay) {
        let timerId;
        return function (...args) {
            if (timerId) {
                clearTimeout(timerId);
            }
            timerId = setTimeout(() => {
                fn(...args);
                timerId = null;
            }, delay);
        }
    }
    window.addEventListener('keyup', debounce((e) => {
        console.log(e.code);
    }, 300));
</script>

debounce 函数是从松手那一刻开始,300 毫秒之后才会打印出东西

image.png

不论你按多少此按键,只会打印最后一次按的键。
达到的效果就是按键在300毫秒的时间内,不管按多少次按键,都只会限制最后一次按的,
但是300秒之后,可以再次按

document.getElementById('button').ontouchstart = debounce((e) => {
        console.log(e);
    }, 1000)
上一篇下一篇

猜你喜欢

热点阅读