2012-06-21 138 views
2

我在嘗試運行一個函數時只遇到了一次onresize事件觸發時,我已經看過這個問題DOM onresize event但我沒有使用jQuery並且無法使該函數正常工作沒有。有什麼建議麼?JavaScript onresize事件多次觸發

+0

發表一些代碼 - 從我的頭頂開始,使用布爾值? –

+1

鏈接的答案不需要jQuery的工作,純JavaScript的。再讀一次 – Alexander

+0

$(window).resize($。debounce(1000,function(){ //在一秒鐘的平靜後只處理一次總的調整大小 ... })); 我已經嘗試使用這個沒有jQuery,但它不工作,我用這個Firefox內部擴展 – ama2

回答

11

在調整大小操作期間,調整大小事件對於每個幀都會調用一次。如果您想在調整大小完成時調用它,只需使用回調函數設置定時器即可。

var timeOut = null; 

window.onresize = function(){ 
    if (timeOut != null) 
     clearTimeout(timeOut); 

    timeOut = setTimeout(function(){ 
     // YOUR RESIZE CODE HERE 
    }, 500); 
}; 
+0

當然,如果用戶持續半秒鐘的窗口大小,這種方法將不會如預期般運作。這是一個很好的答案,但不是萬無一失的。 –

+2

我不這麼認爲。這種行爲甚至可能是他正在尋找的。 –

+0

@Kinkink:無法檢測調整大小操作的結束。 – Bergi

4

您可以使用debounce實施from underscore

function debounce(func, wait, immediate) { 
    var timeout; 
    return function() { 
     var context = this, args = arguments; 
     var later = function() { 
     timeout = null; 
     if (!immediate) func.apply(context, args); 
     }; 
     if (immediate && !timeout) func.apply(context, args); 
     clearTimeout(timeout); 
     timeout = setTimeout(later, wait); 
    }; 
    } 
    window.onresize = debounce(function() { 
     // Your code here 
    }, 500); 

或者使用library from the linked question。沒有jQuery,它是Cowboy.debounce(...)