节流和防抖

104 阅读1分钟

节流和防抖

什么是节流?

节流: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效 (王者荣耀技能)
防抖: n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时(王者荣耀回城)

手写节流和防抖

//⭐节流
//原理:设置节流阀为true,触发事件后关闭节流阀,当定时器执行完毕在打开节流发,这样可以保证每隔一段事件触发一次,减少资源浪费
<button>点我节流</button>
<script>
const btn = document.querySelector('button')
let flag = true
btn.addEventListener('click', function () {
if (flag) {
  flag = false
  timer = setTimeout(() => {
    console.log(1)
    flag = true
  }, 1000)
}
})
</script>

//⭐防抖
//原理:触发事件先清除定时器,在打开定时器,一短时间后执行定时器内容,如果一直触发事件,就一直在清理定时器
<button>点我防抖</button>
<script>
  const btn = document.querySelector('button')
  let timer = null
  btn.addEventListener('click', function () {
    clearTimeout(timer)
    timer = setTimeout(() => {
      console.log(1)
    }, 1000)
  })
</script>

节流和防抖的使用场景

节流:窗口调整、页面滚动、抢购和疯狂点击
防抖:输入框输入内容,登录、发送短信时用户多次点击发送请求,需要防抖