我正在寻找一个简单的&用于编码jQuery事件处理程序的语义方式,允许合理的超时或以其他方式“减慢”事件被触发的速度,以防止用户(故意或无意地)发送垃圾邮件。
这对我个人来说通常不是一个问题,因为在大多数情况下简单地停止前一个处理程序的操作就足够了 - 例如,一个淡入淡出的菜单;只需在动画上使用.stop()
即可。
然而,我现在正在制作更多js重页,其事件太昂贵,不能每秒发射一次或两次以上,并且通过多种方式触发这些事件,我发现自己需要限制它们的频率在更基层执行。
问题的一个例子:
$(document).bind('mousewheel', function(e, delta){
alert('you scrolled the mousewheel!');
stopLoadsOfStuff();
fadeHalfADozenImagesInAndOutAgain();
});
我正在使用鼠标滚轮插件(此处:http://brandonaaron.net/code/mousewheel/docs),因为取决于鼠标,操作系统或制造商提供的软件,滚动速率可能会有很大差异。想想那些闪亮的苹果触摸鼠标与90年代的旧球鼠标之一。如果您在滚动时触发事件,您会发现除非您的事件执行和停止非常便宜,否则您需要将其限制为合理的事情。
我已经尝试过的事情是:
对于点击和键盘事件:
为每个事件设置一个布尔值,在事件触发时将其设置为true,并使用回调将其再次设置为false。仅当bool为false时才会执行事件。 这很有效,但是很混乱,而且有点过于具体。
对于鼠标滚轮事件:
每次检测到鼠标滚轮事件时,我都会增加一个整数变量,只有当它超过5时才执行操作。处理程序在执行时将其重置为0。
TL;博士
我需要一种可扩展的,简单的方法来限制事件处理程序的执行速度,这将允许我使用昂贵的事件处理程序,而不必担心用户尝试每秒执行100次:)
任何帮助表示赞赏