|
在瀏覽器上,某些事件的觸發(fā)是非常頻繁的,幾乎是毫秒級(jí)的,最典型的就是document.onmousemove,而這么頻繁的事件,往往都是弊大于利的。今天看到一個(gè)很好的解決辦法,這里稍加改進(jìn)成通用的方法,雖不能徹底解決問(wèn)題,但是可以有效緩解,而且簡(jiǎn)單易行,核心代碼如下:
//可進(jìn)一步擴(kuò)展為支持可傳參的fn
var onFooEndFunc = function(fn) {
var delay = 50; // 根據(jù)實(shí)際情況可調(diào)整延時(shí)時(shí)間
var executionTimer;
return function() {
if (!!executionTimer) {
clearTimeout(executionTimer);
}
//這里延時(shí)執(zhí)行你的函數(shù)
executionTimer = setTimeout(function() {
//alert('123');
fn();
}, delay);
};
};
下面以document.onmousemove為例,看看運(yùn)行的效果,使用延時(shí)處理前,移動(dòng)鼠標(biāo),會(huì)發(fā)現(xiàn)事件觸發(fā)非常頻繁,使用延時(shí)處理后,移動(dòng)鼠標(biāo),事件就沒(méi)那么頻繁了。
it知識(shí)庫(kù):[JavaScript]使用setTimeout減少多余事件,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。