他の人が言っているように、あなたはi
2つの場所(for
後付けとループの本体)でインクリメントしているので、本体の割り当てを削除することが最初に修正する部分です。また、元のHTMLは「元に戻され」ていません。
ただし、これは主な問題ではありません。JavaScriptはループを即座に(2回)実行するため、すべてのfadeOut / fadeIn関数は、期待どおりのタイムアウト後に実行されるのではなく、それぞれ2000/2400ミリ秒後に実行されます。これを確認するには、デモのの代わりにconsole.log(i);
またはを配置し、ページが読み込まれるとすぐに3つのログ行/アラートを確認します。alert(i);
i++
マークアップをJavaScriptで作成するのではなく、HTMLとして配置し、2つのHTMLフラグメント間でフェードインします。たとえば、デモまたは次のサンプルコードを参照してください。
HTML
<div id="footer-address">
<span><strong>We have moved!</strong> Our new address is:</span>
<span><strong>Our Place</strong> New Address Location</span>
</div>
CSS
#footer-address {
margin-bottom: 2px;
text-transform: uppercase;
margin: 0;
padding: 0;
font-family: Arial,Helvetica,sans-serif;
font-size: 10px;
}
#footer-address span:last-child {
display:none;
}
JavaScript(jQueryが必要)
var $footer = $('#footer-address');
var i = 0;
(function swap(){
var $hiddenSpan = $footer.find('span:hidden')
$footer.find('span:visible').fadeOut(400, function() {
$hiddenSpan.fadeIn(400)
})
if (i++ < 3) setTimeout(swap, 2000)
})();
JavaScriptは、 2秒間隔で3回実行される自己実行関数(http://sarfraznawaz.wordpress.com/2012/01/26/javascript-self-invoking-functions/を参照)を使用します。また、jQuery関数のコールバック(2番目)パラメーターを利用して、fadeOutが終了した後にが開始されるようにします。.fadeOut()
.fadeIn()
ここには改善の余地があると思いますが、それでも役立つことを願っています。