1. 程式人生 > >JavaScript 防抖 && 節流

JavaScript 防抖 && 節流

函式防抖和節流都是為了防止一個函式被無意義的高頻率呼叫。
多次觸發事件,防抖只會執行最後一次;節流會隔一段時間執行一次。

防抖

防抖是指,某些程式碼不可以在沒有間隔的情況下連續執行。第一次呼叫函式,建立一個定時器,在指定的時間間隔之後執行程式碼。當第二次呼叫函式是,清除前一個定時器並設定另外一個。

如果前一個定時器已經執行,那麼這個操作就沒有什麼意義。然而,如果前一個定時器尚未執行,那就是將其替換成一個新的定時器。目的是隻有在執行函式的請求停止了一段時間之後在執行。

基本模型:

	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) }