2011-02-10 17 views
13

ここで何をしていますか?遅延追加クラス/クラス削除機能が動作しない

$(function() { 
$('ul li:nth-child(1)').addClass("go").delay(4500).removeClass("go"); 
$('ul li:nth-child(2)').addClass("go").delay(1500).removeClass("go"); 
$('ul li:nth-child(3)').addClass("go").delay(500).removeClass("go"); 
$('ul li:nth-child(4)').addClass("go").delay(4500).removeClass("go"); 
$('ul li:nth-child(5)').addClass("go").delay(1000).removeClass("go"); 
}); 
+0

ほとんどの説明は便利です。私はあなたがリストのクラスを特定の順序で変更しようとしていると推測しています。何がうまくいかない? – Spacedman

+0

.delay()はアニメーションを遅延させますが、関数は使用しません。 –

答えて

16

.delay()は、アニメーションでのみ動作するように設計されています。あなたがやっている何のために定期的なsetTimeoutsを使用してに頼る必要があるでしょう:

var li = $('ul li:nth-child(1)').addClass('go'); 
setTimeout(function() { 
    li.removeClass('go'); 
}, 4500); 

もう少しすべての<li>快適にこれを行うようにするには、あなたがそうのようなあなたのコードをリファクタリングすることができます

$(function() { 
    var delays = [4500, 1500, 500, 4500, 1000]; 
    $('ul li').addClass('go').each(function (i) { 
     setTimeout(function (li) { 
      li.removeClass('go'); 
     }, delays[i], $(this)); 
    }); 
}); 
+0

私はアニメーションを作成しています。次に、クラスを削除して次のリスト項目に追加するだけで、あらかじめ決められた時間、各リスト項目にクラスを1つずつ追加する必要があります。この時点で、全く異なる量の所定時間の間、同じクラスが次のリスト項目に追加されます。 a –

+0

@Bizarroについては、ここで働いています:http://jsfiddle.net/eXJQB/ –

+0

thx、それはちょっと働いています...もしあなたが見たら、すべてのクラスが同じ瞬間に適用されているのを見てください(彼らはすべて同じ時刻に青色に変わります)。私はクラスが1つのリスト項目に適用される必要があります。時間が過ぎると、それは次のリスト項目に適用されます –

39

追加するだけで、.queue

$('ul li:nth-child(1)').addClass("go") 
         .delay(4500) 
         .queue(function() { 
          $(this).removeClass("go"); 
          $(this).dequeue(); 
         }); 
+1

ああ、私はこの+1を忘れてしまった。しかし、 '.dequeue()'や 'next()'を忘れないでください! –

+1

@ Box9 - 良い点。私は '.dequeue()'に投げた。 – karim79

+1

それはまだ同じ問題です - クラスは同時にリストアイテムに追加されます...その後、それらは異なる時間に削除されます:http://jsfiddle.net/bM6uY/8/ –

関連する問題