2012-07-22 64 views
1

是否可以這樣做。假設在一段時間內有很多同樣的事件觸發很多時間。我們將取消所有以前的活動,並僅使用最後一個活動。取消除最後一個以外的所有事件,

只有當沒有更多的事件持續3秒時,最後的事件纔會進行一次。

例如。有一個按鈕。我們會讓用戶多次點擊此按鈕,我們將不會禁用此按鈕。無論用戶點擊了多少次,我們都會認爲這只是一次點擊次數而已。點擊事件將在3秒內沒有更多點擊時執行。

+0

您好![可以請你提供一些小提琴示例](http://jsfiddle.net/AvczB/)? – Stano 2012-07-22 12:02:34

回答

3

你在找什麼叫做debouncing。對於這個任務已經有一個很好的plugin/library from Ben Alman

(function() { 
    var button = document.getElementsByTagName("button")[0], 
     func = Cowboy.debounce(1000, function() { console.log("click fired!"); }); 

    button.addEventListener("click", func); 
}())​ 

fiddle

+0

謝謝,不知道 – user907860 2012-07-22 12:17:29

+0

牛仔與jquery 1.7.2不兼容..無論如何仍然是一個很好的幫助。 – 2012-07-22 13:46:30

+0

@SarawutPositwinyu這是不對的;)你沒有用jQuery標記你的問題,所以我認爲你正在尋找一個香草JS解決方案。如果jQuery可用,插件會將其兩個函數添加到jQuery名稱空間,而不是創建自己的「Cowboy」。因此,而不是'Cowboy.debounce',你將不得不使用'$ .debounce'。它全部記錄在Ben Almans站點:) – Andreas 2012-07-22 18:14:30

1
var domButton = document.getElementById('some-button'), 
    timeOut; 
domButton.addEventListener('click', function(e) { 
    if (e.clientX && e.clientY) { 
     e.preventDefault(); 
     clearTimeout(timeOut); 
     timeOut=setTimeout(function({document.getElementById('somebutton').click()},3000); 
    } 
},false) 
相關問題