【问题标题】:How do I measure the time between 2 clicks of a button?如何测量两次单击按钮之间的时间?
【发布时间】:2011-07-09 09:51:03
【问题描述】:

我正在制作一个网站,用户在该网站上反复点击一个按钮来增加他/她的分数。为了防止人们作弊,我想测量每次点击之间的时间量,如果他们的点击速度非常快并且点击之间的时间很短,我想要一个验证码或其他东西。

如何衡量点击之间的时间?

【问题讨论】:

    标签: php javascript jquery time click


    【解决方案1】:

    点击处理程序可以只维护一个时间戳作为 JavaScript“日期”实例。减去其中两个,您就得到了以毫秒为单位的间隔。

    请注意,时钟精度不一定那么好,而且人类可以非常快地产生点击。我认为,Windows 不会为您提供超过 15 毫秒的粒度。

    【讨论】:

    • 我认为从 Date 对象中获取时间戳不会遇到粒度问题。 setTimeoutsetInterval 遇到这个问题。还是我错了?
    • 你可能是对的,但请记住,事件调度机制本身可能会起作用。换句话说,低级设备中断在游戏控制台中触发响应的方式与 Web 浏览器将鼠标单击中继到 JavaScript 处理程序的方式之间存在很大差异。还涉及到一些更厚的软件层,其中没有一个是为实时游戏而设计的。
    • 感谢回复,粒度是什么意思?
    • 好吧,对于某些事情来说,时钟的准确性非常低,你不能相信它的时间间隔小于大约 15 毫秒。正如@meouw 所说,处理事件时情况可能会更好,但您应该做一些测试,看看它的表现如何。
    【解决方案2】:

    我的建议如下:

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

    这将以毫秒为单位输出并存储两次点击之间的差异。您可以使用历史数组来获取平均值并检查它是否低于 50 毫秒或其他什么。

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

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

    【讨论】:

    • 这正是我一直在寻找的东西,谢谢!这听起来可能有点愚蠢,但是如何查看存储数据的控制台日志呢?谢谢
    • @Taimur:您需要一个能够理解输出的调试器/工具,例如 FirebugWebkits 开发工具
    • @Taimur:但是,我更新了输出的第二个示例。
    • 哦,是的,这非常有用,我可以运行验证码之类的,而不是显示文本吗?
    • @Taimur:你当然是!但不要忘记,我们只是在浏览器的 Javascript 环境中。所以这可以被操纵,你不应该太相信它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多