zoukankan      html  css  js  c++  java
  • 防抖和节流

    /**
     * 防抖
     *
     * @param {*} f
     * @param {*} wait
     * @return {*} 
     */
    function debounce(f, wait) {
      let timer = null;
      return (...args) => {
        if(timer) {
          clearTimeout(timer)
        }
        timer = setTimeout(() => {
          f(...args);
        }, wait);
      }
    }
    
    /**
     * 节流 非首次执行
     *
     * @param {*} f
     * @param {*} wait
     * @return {*} 
     */
    function throttle(f, wait) {
      let timer = null;
      return (...args) => {
        if(timer) {
          return
        }
        timer = setTimeout(() => {
          f(...args);
          timer = null;
        }, wait);
      }
    }
    
    /**
     * 节流 首次执行
     *
     * @param {*} f
     * @param {*} wait
     * @return {*} 
     */
    function throttle(f, wait) {
      let last = 0;
      return (...args) => {
        const now = Date.now();
        if(now - last >= wait) {
          f(...args);
          last = now;
        }
      }
    }
    
    /**
     * 节流 两者结合
     *
     * @param {*} f
     * @param {*} wait
     * @return {*} 
     */
    function throttle(f, wait) {
      let last = 0;
      let timer = null;
      return (...args) => {
        const now = Date.now();
        const remaining = wait - (now - last);
    
        clearTimeout(timer)
    
        if(remaining <= 0) {
          f(...args);
          last = Date.now();
        }
        else {
          if(timer) return;
          timer = setInterval(() => {
            f(...args);
            last = Date.now();
          }, remaining);
    
        }
      }
    }
    
    function sayHellow() {
      console.log('hellow');
    }
    
    // const debounceSayHellow = debounce(sayHellow, 2000);
    
    // debounceSayHellow();
    // debounceSayHellow();
    // debounceSayHellow();
    // debounceSayHellow();
    // debounceSayHellow();
    // debounceSayHellow();
    
    const throttleSayHellow = throttle(sayHellow, 2000);
    
    setInterval(() => {
      throttleSayHellow();
    }, 500);
    

      

  • 相关阅读:
    苹果系统的时间兼容问题
    WOWJS+animate滚动特效
    js的帧动画
    网页图片透明加载
    文字不可被选中设置属性!
    [转]阻塞IO与非阻塞IO
    死锁
    TCP 三次握手四次挥手
    键入网址后,期间发生了什么
    堆排序
  • 原文地址:https://www.cnblogs.com/tipsydr/p/15233331.html
Copyright © 2011-2022 走看看