2012-04-11 13 views
1

このコードは動作しません。どうすれば解決できますか?jqueryでhide/showを使用する

私はなぜ

$(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); 
    }); 
}); 

答えて

3

まず第一に、あなたドンを理解しない、私はこの後、私は7秒の遅れで一つずつを表示...すべてを隠す..

が、すべてが示されています「Tは限り上映それぞれ一つずつとして

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

、.eachを使用する必要があり、遅延がブロックし、悪いことでしょうJS全体スレッドの実行を停止し、あなたのアプリケーションシートがありませんnは非常に応答しないようです。それらを1つ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); 
+0

jsfiddleの例を、使用例などと正確に一致するように更新しました。 –

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); 
    }); 
}); 
+1

インデックスは0から始まり、遅延の内側にインデックスと1を必要とするかもしれません。 'texts.hide()'は '.each'の代わりにすべてを隠すべきです –

+0

最初のものを遅らせるかどうかに依存します。7seconds 。 –

+0

真実..私からの良い答え+1。 –

0

ではなく.throttleを使用してチェックしてください。

+0

悪い考えではなく、foreachで使用するのが難しいようです。 –

0
$(function() { 
    $('.text-block').hide().each(function(item, index) { 
     $(item).delay(7000*index).show(300, function() { 
      $(this).delay(7000).hide(300); 
     }); 
    }); 
});