2016-11-06 9 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

私は使用後に何かをデキューする必要がありますか? ボタンをクリックした後も同じクラスを削除したいと思っています。最初にクリックした後は魔法のように動作しますが、2回目にクリックすると(今度はaddClassをremoveClassに変更しても)何も起こりません。 – Ancinek

+0

@Ancinek:それについて申し訳ありません。上に固定。 –