防抖(debounce)和节流(throttle)

Posted zhoulixue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防抖(debounce)和节流(throttle)相关的知识,希望对你有一定的参考价值。

防抖(debounce)

当调用动作触发一段时间后,才会执行该动作,若在这段时间间隔内又调用此动作则将重新计算时间间隔

 

function debounce(method, timeout, context) 
  return function() 
    var args = arguments
    clearTimeout(method.timer)
    method.timer = setTimeout(() => 
      method.apply(context, args)
    , timeout)
  

function handleResize() 
  console.log(‘resize‘)

window.onresize = debounce(handleResize, 500, window)

 

节流(throttle)

预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新的时间周期

function throttle(method, timeout, context, cycle) 
  var startTime = +new Date()
  return function() 
    var args = arguments
    var currTime = +new Date()
    clearTimeout(method.timer)
    if (currTime - startTime >= cycle) 
      method.apply(context, args)
      startTime = currTime
     else 
      method.timer = setTimeout(() => 
        method.apply(context, args)
      , timeout)
    
  

function handleResize() 
  console.log(‘resize‘)

window.onresize = throttle(handleResize, 500, window, 2000)

 

以上是关于防抖(debounce)和节流(throttle)的主要内容,如果未能解决你的问题,请参考以下文章

lodash 的 防抖(debounce)和节流(throttle)

防抖(debounce)和节流(throttle)

debounce(防抖)和throttle(节流)

防抖(debounce)和节流(throttle)

javascript防抖(Debouncing)和节流阀(Throttling)

javascript防抖(Debouncing)和节流阀(Throttling)