前端函數防抖(debounce)和函數節流(throttle)


防抖&節流

在前端開發中一部分的用戶行為會頻繁的出發事件執行,對DOM操作、資源加載等耗費性能的處理,很可能導致界面卡頓,甚至瀏覽器的崩潰。函數防抖(debounce)和函數節流(throttle)就是為了解決類似的需求應運而生的。

 

  • 防抖

函數防抖就是在函數需要頻繁觸發情況時,只有足夠空閑的時間,才執行一次。好像公交車司機會等全部人上車后才出站一樣。

 

應用場景:實時搜索(keyup)、拖拽(mousemove)

 

var input = document.getElementsByTagName('input')[0]; var timer = null; function ajax() { console.log(this.value); } input.oninput = function () {   var _self = this,
_arg = arguments;
  clearTimeout(timer);
  timer = setTimeout(function () {
    ajax.apply(_self, _arg);
  }, 1000);
}

 

封裝防抖函數

function debounce(handler, delay) { var timer = null; return function () { var _self = this, _arg = arguments; clearTimeout(timer); timer = setTimeout(function () { handler.apply(_self, _arg); }, delay); } }

 

  • 節流

函數節流就是預定一個函數只有在大於等於執行周期時才執行,周期內調用不執行。好像水滴攢到一定重量才會落下。

 

應用場景:窗口調整(resize)、頁面滾動(scroll)、搶購瘋狂點擊(mousedowm)

 

function throttle(handler, wait) { var lastTime = 0; return function () { var nowTime = new Date().getTime(); if (nowTime - lastTime > wait) { handler.apply(this, arguments); lastTime = nowTime; } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM