JavaScript 防抖 && 節流
阿新 • • 發佈:2018-11-04
函式防抖和節流都是為了防止一個函式被無意義的高頻率呼叫。
多次觸發事件,防抖只會執行最後一次;節流會隔一段時間執行一次。
防抖
防抖是指,某些程式碼不可以在沒有間隔的情況下連續執行。第一次呼叫函式,建立一個定時器,在指定的時間間隔之後執行程式碼。當第二次呼叫函式是,清除前一個定時器並設定另外一個。
如果前一個定時器已經執行,那麼這個操作就沒有什麼意義。然而,如果前一個定時器尚未執行,那就是將其替換成一個新的定時器。目的是隻有在執行函式的請求停止了一段時間之後在執行。
基本模型:
var processor = {
timeoutId: null ,
//實際進行處理的方法
performProcessing: function(){
//實際執行的程式碼
},
//初始處理呼叫的方法
process: function(){
clearTimeout(this.timeoutId);
var that = this;
this.timeoutId = setTimeout(function(){
that.performProcessing();
}, 100);
}
};
//嘗試開始執行
processor.process();
優化:
function throttle(method,context){
clearTimeout(method.timer)
method.timer = setTimeout(function(){
method.call(context)
},500)
}
節流
節流就是讓函式在特定的時間執行一次。
// 函式節流
var canRun = true;
document.getElementById("throttle").onscroll = function(){
if(!canRun){
return
}
canRun = false
setTimeout( function () {
console.log("函式節流")
canRun = true
}, 500)
}