2017-01-02 27 views
0

由於人們誤解我的措辭,我會重寫它,我想「下面的代碼」忽略我在jQuery中下面評論的函數,如果它發生在最後「X」秒。 這是我的代碼。忽略函數,如果發生在x秒內

編輯::請寫參考這個例子的答案。 「劇本忽略了課堂上的變化,延遲將無法正常工作」http://www.w3schools.com/code/tryit.asp?filename=FBC4LK96GO6H

對不起,包括我自己在內的每個人都感到困惑。

+2

的可能的複製[什麼是最簡單的方法來調用jQuery中每5秒一個函數?](http://stackoverflow.com/questions/2170923/whats-the-easiest-way-to-call-a-function-every-5-seconds-in-jquery) –

+0

@ FabianSchultz與我的問題無關。完全不同。 –

回答

2

由於作者的帖子更新而被修改。

您可以創建custon事件。通過這個函數,你將定義:所選對象上的「delayedClick」事件。

function delayedClickable(selector, delayTime){ 
    $(document).ready(function(){ 
    $(selector).each(function() { 
     var lastTimeFired = 0; 
     $(this).click(function(){ 
     if(Date.now() - delayTime > lastTimeFired) { 
      lastTimeFired = Date.now(); 
      $(this).trigger('delayedClick'); 
     } 
     }); 
    }); 
    }); 
} 

Remeber,你應該確定所選擇的元素delayTime與此事件:

var delayTime = 3 * 1000; // 3 sec delay between firing action 
delayedClickable('.Img2', delayTime); 

,然後只用你的事件上的元素。例如點擊事件可以以這種方式被使用:

$element.on('click', function() { 
    // ... 
}); 

以及自定義delayedClick事件應該以這種方式被使用:

$element.on('delayedEvent', function() { 
    // ... 
}); 

完整的示例: http://www.w3schools.com/code/tryit.asp?filename=FBC56VJ9JCA5


@更新 我發現了一些棘手的方法來繼續使用點擊功能,並使其按預期工作:

function delayedClickable(selector, delayTime){ 
    $(document).ready(function(){ 
    $(selector).each(function() { 
     var scope = this; 
     $(this).click(function(){ 
     scope.style.pointerEvents = 'none'; 
     setTimeout(function() { 
      scope.style.pointerEvents = 'auto'; 
     }, delayTime); 
     }); 
    }); 
    }); 
} 

然後

var delayTime = 3 * 1000; // 3 sec delay between firing action 
delayedClickable('.Img2', delayTime); 

這就是全部。

第二種方式的關鍵在於,我們在點擊時禁用元素上的任何指針事件,然後在超時後我們將這些事件恢復爲工作狀態。 https://developer.mozilla.org/en/docs/Web/CSS/pointer-events

而完整的例子: http://www.w3schools.com/code/tryit.asp?filename=FBC678H21H5F

+0

讓我測試一下我的編碼,但是,如果添加到「if」和「else if」中,它可以很好地工作 –

+0

也許你想包裝整個'$(「。element1」)。click(function ){...}'函數​​與這個如果(ofc把這個,如果裏面,進入函數) 試試這個(以前我已經包裝只切換到紅色與if,但記住,紅色是初始值,所以在我的第一個例子第二次從藍色到紅色將被延遲,我想你只想延遲從藍色到紅色,因爲有評論)。這是涵蓋每一個點擊的版本: http://codepen.io/anon/pen/LxPrGP –

+0

嘿,我想我已經想出了我的這個問題的一部分,我知道它不是寫在原來的帖子,但這一切都作爲腳本附加到身體。添加的已添加的腳本在重複時會被忽略。如果沒有太多要問,用你給出的原始答案,你能解釋我如何將所有這些附加到身體並使其仍然有效嗎? –

1

可以使用setTimeout()改變標誌變量和條件,以在事件處理程序檢查標誌

var allowClick = true, 
    delaySeconds = 5; 
$(".element1").click(function(){ 
    if(!allowClick){ 
     return; // do nothing and don't proceed 
    } 
    allowClick = false; 
    setTimeout(function(){ 
     allowClick = true; 
    }, delaySeconds * 1000); 

    // other element operations 
}) 
+0

http://www.w3schools.com/code/tryit.asp?filename=FBC4LK96GO6H它會與此工作? –

+0

爲什麼不......你嘗試過嗎? – charlietfl

+0

親自看看,我對jquery和所有人都比較陌生,如果你看到我遇到的問題,你會更好地理解我的想法。我試過了,但我認爲更大的問題是jQuery中的其他內容。 –