2011-03-05 94 views
3

我正在制作一个网站,用户反复点击一个按钮来增加他/她的分数。为了防止人们作弊,我想测量每次点击之间的时间间隔,如果他们点击的速度非常快,点击之间的时间非常短,我想要一个CAPTCHA或其他东西出现。如何测量两次点击按钮之间的时间?

我如何测量点击次数?

回答

3

我的建议是这样的:

$('button').click((function() { 
    var history = [], 
     last = +new Date(); 

    return function(e) { 
     history.push(e.timeStamp - last); 

     console.log(history[history.length - 1]); 
     last = e.timeStamp; 
    }; 
}())); 

这将输出&店以毫秒为单位两次点击之间的差异。你可以使用历史数组来获得平均值,并检查它是否低于50ms或什么。

演示http://jsfiddle.net/TxKjT/

演示,平均检查http://jsfiddle.net/TxKjT/2/

+0

这正是我期待的那种东西,谢谢!这可能听起来有点愚蠢,但是如何查看数据存储在控制台日志中?谢谢 – Taimur 2011-03-05 13:57:49

+0

@Taurur:你需要一个能够理解输出的调试器/工具,比如* Firebug *或* Webkits Developer tools * – jAndy 2011-03-05 14:00:09

+0

太棒了,谢谢 平均检查是个好主意:D – Taimur 2011-03-05 14:01:42

4

点击处理程序只能将时间戳记保留为JavaScript“Date”实例。减去其中的两个,你的间隔以毫秒为单位。

请注意,时钟精度不一定非常好,人类可以快速生成点击。我认为Windows不会比15毫秒的粒度更好。

+0

我想抓住从Date对象中的时间戳不从粒度问题的困扰。 'setTimeout'或'setInterval'遭受这个问题。或者我错了? – meouw 2011-03-05 13:36:23

+0

您可能是对的,但请记住,事件派遣机制本身可能会发挥作用。换句话说,底层设备中断触发游戏控制台响应的方式与Web浏览器将鼠标点击传递给JavaScript处理程序的方式有很大区别。还有一些更厚的软件层,其中没有一个特别适合实时游戏。 – Pointy 2011-03-05 13:39:23

+0

感谢您的回复,您的意思是粒度? – Taimur 2011-03-05 13:55:02