如何测量按钮两次点击之间的时间?

3
我正在制作一个网站,用户可以重复点击按钮以增加他/她的分数。为了防止作弊,我想测量每次点击之间的时间,如果他们点击得非常快,并且点击之间的时间非常短,我希望出现一个验证码或类似的东西。
如何测量点击之间的时间?
2个回答

4

点击处理程序可以通过JavaScript "Date"实例来维护时间戳。计算两个时间戳的差值,就可以得到以毫秒为单位的时间间隔。

请注意时钟精度不一定很高,人类可以非常快地生成点击事件。我认为Windows系统提供的精度不会比15毫秒更好。


我认为从Date对象中获取时间戳不会受到粒度问题的影响。而setTimeout或setInterval则会受到这个问题的影响。或者我错了吗? - meouw
你可能是对的,但要记住事件派遣机制本身可能发挥了一定作用。换句话说,在低级设备中断触发游戏控制台响应的方式与Web浏览器将鼠标点击传递给JavaScript处理程序之间存在很大差异。涉及到更多的软件层,其中没有一个特别设计用于实时游戏。 - Pointy
谢谢回复,您所说的“粒度”是什么意思? - Taimur
对于某些事情来说,时钟的准确性相当低,您不能信任它在小于约15毫秒的时间间隔内。正如@meouw所说,处理事件时情况可能会更好,但您应该进行一些测试并查看其行为如何。 - Pointy

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;
    };
}()));

这将输出并存储两次点击之间的毫秒差异。您可以使用history数组来获取平均值,并检查是否低于50ms或其他值。

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

带平均值检查的演示: http://jsfiddle.net/TxKjT/2/


这正是我在找的那种东西,谢谢!这可能听起来有点蠢,但我该如何查看存储数据的控制台日志呢?谢谢。 - Taimur
@Taimur:你需要一个能够理解输出的调试器/工具,例如FirebugWebkits开发者工具 - jAndy
@Taimur:不过,我已经更新了第二个示例的输出。 - jAndy
哦,是的,那非常有用。我能否运行CAPTCHA或类似的东西,而不是让文本出现? - Taimur
@Taimur:当然,你是的!但别忘了,我们只是在浏览器Javascript环境中。因此,这可能会被操纵,你不应该过于信任它。 - jAndy
用户可以以何种方式操纵它?我知道阻止作弊几乎是不可能的,但我想尽可能地缩小范围,然后手动挑选出剩下的少数。 - Taimur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接