簡體   English   中英

檢查是否在時間內單擊了按鈕

[英]Check if button has been clicked within time

這是我想做的:

  1. 用戶單擊按鈕,運行功能A
  2. 如果在1秒鍾內沒有再次單擊該按鈕,則也運行功能B
  3. 如果按鈕按下,(再次運行函數A和檢查功能B) 重復

這就是我嘗試過的

var clicked = false;

$('#button').click(function(){
    A();
}); 

function A(){
    clicked = true;
    setTimeout(function(){
         clicked == false;
    )}, 1000);

    setTimeout(function(){
        if ( clicked == false ) {
            B();
        }
    )}, 1000);
}

我認為代碼將適用於場景12 ,但是如何使它也適用於場景3

編輯:剛發布時看到了一個相關的SO問題 ,我沒有通過搜索找到。 請稍等,我檢查是否重復

我認為您正在尋求限制(緩沖)點擊次數,也就是說,您想要在執行操作之前等待指定的時間,如果在限制期內再次發生同一事件,請重新開始等待。 http://jsfiddle.net/8QdLV/

function B() {
    console.log('Clicked')
}
var timeoutId;
$('#button').click(function() {
    clearTimeout(timeoutId);
    timeOutId = setTimeout(B, 1000);
});

可以概括為http://jsfiddle.net/8QdLV/

function throttle(handler, buffer) {
    var timeoutId;
    buffer = buffer || 1000;
    return function(e) {
        clearTimeout(timeoutId);
        var me = this;
        timeoutId = setTimeout(function() {
            handler.call(me, e);
        }, buffer);
    }
}

$('button').click(throttle(function() {
    console.log('Throttled click');
});  

順便說一句,您可能想使用https://code.google.com/p/jquery-debounce/ ,它也提供了$.throttle函數

使用setInterval函數。

請注意,用布爾值記錄單擊是不夠的,否則在t=0兩次t=0.99兩次點擊都將在t=1被重置操作清除。

var clicked = false
  , hnd_reset = null
  , hnd_check = null;

$('#button').click(function() {
    A();
}); 

function A(){
    clicked = true;
    hnd_reset = setTimeout(function(){
         clicked = false;
         hnd_reset = null;
    )}, 1000);

    if (hnd_check === null) {
        hnd_check = setInterval(function(){
            if ( !clicked && (hnd_reset === null)) {
                clearInterval( hnd_check );
                hnd_check = null;
                B();
            }
        )}, 1000);
    }
}

或者,您也可以跟蹤從0開始的int的點擊次數,如果跟蹤器為0,則允許執行B

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM