我在尋找一個簡單的&語義的實現代碼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倍第二:)
任何幫助表示讚賞
您正在尋找** event debouncing/throttling **。不知道這是否足夠你的目的:http://benalman.com/projects/jquery-throttle-debounce-plugin/ – 2012-01-30 11:32:29