One-AnDong / PandaTalk

书写文字,让技术沉淀
1 stars 0 forks source link

函数节流和防抖 #7

Open One-AnDong opened 5 years ago

One-AnDong commented 5 years ago

节流

简单封装了下两个函数,关于节流和防抖我想前端开发者都很熟悉了,节流就是预定一个周期,在这个周期内函数只会执行一次,也就是大于这个周期函数才会执行,应用场景:窗口调整(resize)、页面滚动(scroll)、抢购疯狂点击(mousedowm)

/* --------------------------函数节流-------------------------------- */
const throttle = (fn, wait) => {
  let lastTime = 0
  return function() {
    let nowTime = new Date().getTime()
    if (nowTime - lastTime > wait) {
      fn.apply(this, arguments)
      lastTime = nowTime
    }
  }
}

防抖

很多时候我们需要在用户作出操作后执行请求或处理业务逻辑,但是用户可能会频繁的进行操作,例如在输入框输入文本,这时候我们就需要防抖了,但用户执行操作一定时间后才执行请求,如果在这段时间内用户又重新进行了操作,那么我们就把之前的操作请求撤销,具体实现如下

/* --------------------------函数防抖-------------------------------- */
const debounce = (fn, wait) => {
  let timer
  return function() {
    clearTimeout(timer)
    timer = setTimeout(() => {
      fn.apply(this, arguments)
    }, wait)
  }
}