防抖和节流

防抖(debounce)

触发事件n秒内,函数只会执行一次,如果在n秒内再次触发事件,则会重新开始计算时间

使用场景:多用在用户频繁输入操作,用防抖来节约请求资源。

function debounce(fn,await) {
  let delay = await || 300
  let timer
  return function () {
    if(timer) clearTimeout(timer)
    timer = setTimeout( () => {
      timer = null
      fn.apply(this,arguments)
    },delay) 
  }
}

节流(throttle)

连续触发事件但是在 n 秒中只执行一次函数

使用场景:多用于onrize,onscroll等这些频繁触发的函数

function throttle(fn,t){
  let last
  let timer
  let interval = t || 500
  return function (){
    let now = +new Date()
    if(last && now - last < inerval) {
      clearTimeout(timer)
      timer = setTimeout(() => {
        last = now
        fn.apply(this,arguments)
      },inerval)
    } else {
      last = now
      fn.apply(this,arguments)
    }
  }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容