2016-11-06 70 views
3

我想將類editing添加到我的鏈接中,但動畫不錯,所以我需要在輕微延遲後添加每個類。jQuery - 每個循環中的addClass之後的延遲

我該如何做到這一點? 我嘗試在循環內插入並清空setTimeout,但它不起作用。

var $links = $('.my_box .link'); 
$link.each(function() { 
    $(this).addClass('editing'); 
    // A delay should be here 
}); 

回答

7

您可以delayqueue做到這一點:

function markLinks() { 
 
    var $links = $('.my_box .link'); 
 
    $links.each(function(i) { 
 
    var $this = $(this); 
 
    $this.delay(i * 200).queue(function() { 
 
     $this.toggleClass("editing").dequeue(); 
 
    }); 
 
    }); 
 
    setTimeout(markLinks, 1500); 
 
} 
 
markLinks();
.editing { 
 
    background-color: yellow; 
 
}
<div class="my_box"> 
 
    <div class="link">one</div> 
 
    <div class="link">two</div> 
 
    <div class="link">three</div> 
 
    <div class="link">four</div> 
 
    <div class="link">five</div> 
 
    <div class="link">six</div> 
 
</div> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

delay設置動畫隊列延遲,並queue時間表上隊列中的函數調用。請注意,您需要在queue回調中調用dequeue,因爲動畫的本質是該回調可能會啓動稍後完成的任務(但在您的情況下,您不會)。

+1

這真了不起。我試圖做類似的事情,但我不知道隊列函數,這就是爲什麼它不工作!謝謝! – Ancinek

+0

使用後我必須要出隊嗎? 我希望能夠在點擊一個按鈕後刪除同一個類,並且在第一次點擊這個工程後會像魔術一樣,但是當我第二次點擊它(這次我將addClass更改爲removeClass)後,什麼也沒有發生 – Ancinek

+0

@Ancinek:是的,對於那個很抱歉;固定在上面。 –