2012-01-30 75 views
2

我在尋找一個簡單的&語義的實現代碼jQuery的事件處理程序,允許合理的超時或其他方式「慢」下來,在該事件被觸發率,爲了以防止用戶發送垃圾郵件(有意或無意)到我的處理程序。jQuery的 - 如何阻止垃圾郵件的用戶事件處理程序

這通常不是對我個人,因爲在大多數情況下,簡單地停止以前的處理器的工作的關注是不夠的 - 例如是衰落菜單;只需在動畫上使用.stop()就足夠了。

但是,我現在正在構建一個更重的js頁面,它的事件太昂貴了,無法每秒觸發一次或兩次以上,並且通過多種方式觸發這些事件,我發現自己需要限制它們的頻率將在更基礎的層面執行。

的問題的一個例子:

$(document).bind('mousewheel', function(e, delta){ 
    alert('you scrolled the mousewheel!'); 
    stopLoadsOfStuff(); 
    fadeHalfADozenImagesInAndOutAgain(); 
}); 

我使用鼠標滾輪插件(這裏:http://brandonaaron.net/code/mousewheel/docs)爲依賴於鼠標,OS或製造商提供的軟件,滾動速率可以變化很大。想想那些閃亮的蘋果觸摸老鼠與90年代的老球鼠之一。如果你開槍滾動一個事件,你會發現,你需要把它限制在合理的東西,除非你的活動是很便宜的執行和停止。

事情我已經嘗試過是:

對於點擊和鍵盤事件:

設置爲每個事件一個布爾值,它設置爲true,而事件觸發,並使用一個回調來設置它再次虛假。只有當bool爲false時纔會執行事件。 這工作,但雜亂,有點太具體。

對於滾輪事件:

我每次檢測到鼠標滾輪事件時間遞增的整數變量,並且如果它是大於5的處理程序重置爲0上執行僅採取行動。

TL;博士

我需要一個可擴展的,簡單的方法來限制事件處理程序的執行速度,這將允許我使用昂貴的事件處理程序,而無需擔心用戶試圖執行它們100倍第二:)

任何幫助表示讚賞

+1

您正在尋找** event debouncing/throttling **。不知道這是否足夠你的目的:http://benalman.com/projects/jquery-throttle-debounce-plugin/ – 2012-01-30 11:32:29

回答

2

您可能感興趣的jQuery debounce plugin

插件背後的概念是它包裹了你在另一個函數中傳遞的處理函數,該函數通過每毫秒調用函數來限制函數的執行。

+0

這是非常接近我所需要的 - 我會試試看,謝謝 – jammypeach 2012-01-30 11:41:06

+0

可以'噸得到這個工作 - jQuery 1.7.x可能不支持:( – jammypeach 2012-01-30 12:02:35

+0

劃傷最後,想通了:) – jammypeach 2012-01-30 12:06:44