zoukankan      html  css  js  c++  java
  • JS防抖与节流函数封装

    防抖

    在监听scroll事件的时候经常会用到防抖,当滚动到某一位置而触发状态,从而不会出现频繁滚动持续触发事件的情况

    防抖的事件处理机制仅触发一次且必须是结束状态下才会执行

    function debounce(callback, delay, immediate) {
        let timer = null;
        return function() {
            const context = this,
                args = arguments;
            timer && clearTimeout(timer);
            immediate && !timer && callback.apply(context, args); // 首次立即触发
            timer = setTimeout(function() {
                callback.apply(context, args);
            }, delay);
        }
    }
    window.addEventListener('scroll',
        debounce(function() {
            console.log(document.documentElement.scrollTop);
        }, 300)
    );
    

    节流

    防抖有个明显的缺点就是它在事件运行的过程中不能够执行事件,比如图片的懒加载就不能够满足,当滚动了很多但是由于没有停止导致图片仍然不会加载出来

    节流的事件处理机制是在一定时间内无法重复调事件

    function throttle(callback, delay) { // 定时器版
        let timer = null;
        return function() {
            const context = this,
                args = arguments;
            if(!timer) {
                timer = setTimeout(function() {
                    timer = null;
                    callback.apply(context, args);
                }, delay);
            }
        };
    }
    
    function throttle(callback, delay) { // 时间戳版
        let start = 0;
        return function() {
            const now = Date.now();
            if(now - start > delay) {
                start = now;
                callback.apply(this, arguments);
            }
        }
    }
    window.addEventListener('scroll',
        throttle(function() {
            console.log(document.documentElement.scrollTop);
        }, 1000)
    );
    
  • 相关阅读:
    hdoj 4251 The Famous ICPC Team Again
    hdoj 1879 最小生成树之继续畅通工程
    并查集之Dragon Balls
    并查集之 Is It A Tree?
    hdoj 1874最短路之畅通工程续
    1040: Count
    hdoj 1874最短路之最短路径问题
    并查集之小希的迷宫
    并查集之食物链
    Ordered Fractions
  • 原文地址:https://www.cnblogs.com/ljwk/p/10483365.html
Copyright © 2011-2022 走看看