関数の節流と手ぶれ防止

1873 ワード

関数の流れ




  
  
  
  Throttle
  



  
    //     :        ,                     
    /*
                            ,          ,       scroll       ,                                  ,   ,   ,           ,    ;
            ,     lastTime          。
    */

    function throttle(fn, delay) {
      //             
      let lastTime = 0
      return function () {
        //           
        let nowTime = Date.now()
        if(nowTime - lastTime > delay){
          //   this    
          fn.call(this)
          //     
          lastTime = nowTime
        }
      }
    }
    function fn(){
      console.log('scroll       ' + Date.now())
    }
    document.onscroll = throttle(fn, 2000)
  


関数ジッパー(debounce)




  
  
  
  Debounce



  

  
    /*
      :           ,      ,        ,      。
      :
         ,       ,            
          ,         ,      
                  ,           
                ,                ,           
  */
    function debounce(fn, delay){
      //          
      let timer = null
      return function(){
        //          
        clearTimeout(timer)
        timer = setTimeout(()=>{
          fn()
        }, delay)
      }
    }

    function fn() {
      console.log('       ' + Date.now())
    }
    document.getElementById('btn').onclick = debounce(fn, 2000)