亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

throttle 函數與 debounce 函數

標簽:
JavaScript

某些操作会导致 DOM 事件频繁被触发,从而频繁调用事件监听函数,如果事件监听函数中执行的是 DOM 操作或加载资源等比较耗费计算机资源的任务时,会导致浏览器反应迟钝甚至崩溃。throttle 函数与 debounce 函数通过使用一些技巧,减少监听函数的执行频率,适用于浏览器的 resize、scroll 事件以及通过文本框 keyup 事件进行 Ajax 请求等操作。

throttle 函数

throttle 函数又称为节流函数。我们可以把水滴理解成事件监听函数,如果我们打开水龙头,水滴会连续不断地涌出,就相当于事件监听函数会连续不断地执行。如果我们将水龙头拧到最小,让水滴一滴一滴地流出,就相当于我们让事件监听函数按照一定的时间间隔来执行。

function throttle (func, wait) {  var lastInvokeTime = 0
  return function () {    var time = Date.now()    if (time - lastInvokeTime >= wait) {
      func()
      lastInvokeTime = time
    }
  }
}// handler 是事件监听函数var handler = function () {  console.log('throttle')
}window.onscroll = throttle(handler, 300)

以上代码中,当连续触发 window 的 scroll 事件的时候,不会连续调用 handler 函数,会保证 handler 函数连续调用的最小时间间隔为 300 毫秒。

debounce 函数

debounce 函数又称为防抖动函数。我们可以把拍照理解成事件监听函数,当我们按下快门的时候,手可能在抖动,这时候照相机不会立即拍照,它会等待我们的手停止抖动之后再拍照,就相当于当我们连续触发事件的时候,事件监听函数不会立即执行,而是等我们一段时间内不再触发事件的时候,再执行事件监听函数。

function debounce (func, wait) {  var timer = null
  return function () {
    clearTimeout(timer)
    timer = setTimeout(func, wait)
  }
}// handler 是事件监听函数var handler = function () {  console.log('debounce')
}window.onscroll = debounce(handler, 300)

以上代码中,当连续触发 window 的 scroll 事件的时候,不会连续调用 handler 函数,会等到持续 300 毫秒都没有 scroll 事件触发的时候,才调用 handler 函数。



作者:Karmack
链接:https://www.jianshu.com/p/38f4b0289e5b


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消