2

ページのいくつかの要素を含む配列があります。

次に、配列を調べてbold各要素にクラスを追加する関数が必要です。問題は、クラスが追加されると、しばらく時間が経過する必要があることです。次にbold、削除して次の要素に適用する必要があり、「波」の動きになります。

私はこのようにそれをやろうとしました:

$.each(tdArr, function(i, v) {
  v.addClass("bold");
  setTimeout(function(){
    v.removeClass("bold");
  }, 900)
})

そのコードの問題は、すべての要素に一度にbold追加され、900ミリ秒後に、すべての要素から同時に削除されることです。

別々のアクションの間に遅延を追加するにはどうすればよいですか?

4

4 に答える 4

1

setTimoutすぐに戻ると、次の要素が太字に設定されなくなります。

次のような方法でそれを行うことができます:

function bold(i){
    if(i>0){
        $tdArr.eq(i-1).removeClass('bold');
    }
    if(i == $tdArr.length){
        return;
    }
    $tdArr.eq(i).addClass('bold')   

    setTimeout(function() { bold(i+1) },900);
}

そして、それを呼び出すには、次のように呼び出す必要がありますbold(0)

実際の例: http://jsfiddle.net/rJGjZ/

于 2012-08-03T14:35:03.347 に答える
0

これを試して:

$.each(tdArr, function(index, element) {
  var $elem = $(element);
  $elem.addClass("bold");
  setTimeout(function(){
    $elem.removeClass("bold");
  }, 900)
})

2 番目のパラメーターは jQuery 要素ではないため、変換する必要があります

于 2012-08-03T14:31:32.737 に答える
0

配列を反復するときに遅延を増やします。まだラップされていない場合は、要素を jQuery でラップしてください。jQuery 要素のコレクションの場合はeach、反復処理に使用します。

var delay = 900

$els.each(function(){
  var $this = $(this)
  setTimeout(function(){
    $els.removeClass('bold')
    $this.addClass('bold')
  }, delay+=900)
})

それ以外の場合はfor、要素を使用して jQuery でラップします。

for (var i=0, l=arr.length, d, prev; i<l; i++; d+=900) {
  prev = arr[i-1]
  setTimeout(function(){
    if (prev) $(prev).removeClass('bold')
    $(arr[i]).addClass('bold')
  }, d)
}
于 2012-08-03T14:36:53.980 に答える
0

このようなものはあなたのために働きますか?

function Bold(element) {
  $(element).addClass("bold"); // we bold the current tdArr
  setTimeout(function(){
    var nextSibling = $(element).next("td") // (if the tdArr are "td" tags) we find the next td brother of this one
    if (!!nextSibling) Bold(nextSibling); // if there is a brother, repeat the function on him after 900ms
  }, 900)
}

Bold(myfirsttd);
于 2012-08-03T14:37:58.783 に答える