3

このコードは機能しません、どうすれば解決できますか?

私はすべてを隠します..この後、私は7秒の遅延で1つずつ表示します..

しかし、すべてが表示されます、私は理由がわかりません

$(function()    {
    texts = $('.text-block');
    slide = $('#slideshow');


    // hide everything
    texts.each(function()   {
       $(this).hide(); 
    });

    // show it once by once
    jQuery.each(texts, function()   {
       $(this).show(300);
       $(this).delay(7000);
       $(this).hide(300);
    });
});
4

4 に答える 4

4

同じポイントから遅れているので、適切な場所に遅れを置くと。

$(function()    {
    texts = $('.text-block');
    slide = $('#slideshow');


    // hide everything
    texts.hide(); 

    // show it once by once
    texts.each( function(index)   {
       $(this).delay(7000 * index).show(300);
    });
});

表示した後、もう一度非表示にしますか?表示してから非表示にするだけなので、削除しました。

短縮版:

$(function() {
    $('.text-block').each(function(index){
        $(this).hide().delay(7000 * index).show(300);
    });
});
于 2012-04-11T19:18:06.930 に答える
3

まず、.eachを使用する必要はありません。

texts = $('.text-block');
texts.hide(); // hides all matched elements

それぞれを1つずつ表示する限り、遅延によってjsスレッド全体の実行が停止することはありません。これにより、ブロックが発生し、アプリケーションが非常に応答しなくなったように見えます。1つずつ表示するには、次のように記述する必要があります。別の方法で

おそらく、アニメーションと遅延がいつ完了するかを知るという約束を使用して、遅延後に次の要素を渡す再帰関数ですか?

そのようです:

http://jsfiddle.net/SbYTL/1/

function ShowItems(items, delay) {
    $(items[0]).fadeIn(300)
        .delay(delay)
        .fadeOut(300)
        .promise()
        .done(function() {
            items.splice(0, 1);
            if (items.length > 0)
            {
                ShowItems(items, delay);    
            }            
    });       
}

var items = $(".text-block").hide();  
ShowItems(items, 7000);
于 2012-04-11T19:17:57.207 に答える
0

.throttle代わりにを使用してチェックアウトしてください。

于 2012-04-11T19:40:25.573 に答える
0
$(function() {
    $('.text-block').hide().each(function(item, index) {
         $(item).delay(7000*index).show(300, function() {
             $(this).delay(7000).hide(300);
         });
    });
});
于 2012-04-11T20:07:58.013 に答える