2011-03-05 93 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