js函式節流(Throttle)

2021-08-08 21:51:29 字數 1072 閱讀 7465

在瀏覽器 dom 事件裡面,有一些事件會隨著使用者的操作不間斷觸發。比如:重新調整瀏覽器視窗大小(resize),瀏覽器頁面滾動(scroll),滑鼠移動(mousemove)。

也就是說使用者在觸發這些瀏覽器操作的時候,如果指令碼裡面繫結了對應的事件處理方法,這個方法就不停的觸發。

而當事件處理比較複雜的時候瀏覽器不斷執行計算,從而導致瀏覽器效能降低甚至卡死,影響使用者體驗。

下面我們就針對這一情況做函式的節流處理(以weindow.scroll為例)。

1、簡單實現(未用閉包)

var timer = null;

window.onscroll = function () , 200);

};

2、利用閉包進行改進

var throttle = function (fn,delay) , delay);

}};function testfn ()

window.onscroll = throttle(testfn, 200);

3、利用函式的私有變數儲存tid

function throttle (method,context,delay) ,delay)

}function testfn()

window.onscroll = throttle(testfn,null,100);

上面這些方法已經可以起到節流效果了,但是會有乙個問題。就是當使用者不斷的出發scroll事件的時候,我們所需要執行的函式一次也不會執行,所以我們就需要設定乙個最小觸發時間,接下來我們對throttle函式再次進行改進。

//fn執行函式 delay停止觸發事件多長時間後執行函式 mintime不斷觸發時強制執行時間

var throttle = function (fn,delay,mintime) else, delay);}}

};function testfn()

window.onscroll = throttle(testfn,200,300);

這樣只需要傳入mintime最小觸發時間就可以了。

函式節流(throttle)

函式節流的目的,是為了防止在不間斷的時間裡,重複執行某個函式。比如瀏覽器的onresize事件,如果我們在這個函式中操作了dom元素,那麼對cpu的開銷是非常大的。所以為了防止這種情況的出現,函式節流起到了很好的作用。1 2 函式節流方法 3 param delay 延遲delay毫秒後,執行fn函...

JS中的函式節流throttle詳解和優化

js中的函式節流throttle詳解和優化 在前端開發中,有時會為頁面繫結resize事件,或者為乙個頁面元素繫結拖拽事件 mousemove 這種事件有乙個特點,在乙個正常的操作中,有可能在乙個短的時間內觸發非常多次事件繫結程式。dom操作時很消耗效能的,如果你為這些事件繫結一些操作dom節點的操...

js原生函式節流

函式節流就是一定時間內只觸發一次函式。原理是通過判斷是否到達一定時間來觸發函式。時間戳方案 function throttle fn,wait function handle window.addeventlistener mousemove throttle handle,1000 定時器方案 f...