[JavaScript]使用setTimeout減少多余事件

作者: Justin  來源: 博客園  發布時間: 2009-12-09 17:13  閱讀: 1419 次  推薦: 0   原文鏈接   [收藏]  

在瀏覽器上,某些事件的觸發是非常頻繁的,幾乎是毫秒級的,最典型的就是document.onmousemove,而這么頻繁的事件,往往都是弊大于利的。今天看到一個很好的解決辦法,這里稍加改進成通用的方法,雖不能徹底解決問題,但是可以有效緩解,而且簡單易行,核心代碼如下:

    //可進一步擴展為支持可傳參的fn
    var onFooEndFunc = function(fn) {
        var delay = 50; // 根據實際情況可調整延時時間
        var executionTimer;
        return function() {
            if (!!executionTimer) {
                clearTimeout(executionTimer);
            }
            //這里延時執行你的函數
            executionTimer = setTimeout(function() {
                //alert('123');
                fn();
            }, delay);
        };
    };

下面以document.onmousemove為例,看看運行的效果,使用延時處理前,移動鼠標,會發現事件觸發非常頻繁,使用延時處理后,移動鼠標,事件就沒那么頻繁了。

 

   

上面只是以 document.onmousemove為例,還有很多其他DOM事件存在相同問題,例如onScroll, onMouseMove, onResize,同理,都可以用這個方法來解決,具體還可以看這里的例子,方法本質上都是一樣的。

0
0
 
標簽:Javascript
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()