正如其他人提到的那样,您i
在两个地方(for
事后思考和循环主体)递增,因此删除主体分配是要修复的第一部分。此外,原始 HTML 不会被“放回”。
然而,这不是主要问题。JavaScript 会立即执行循环(两次),因此所有淡出/淡入函数分别在 2000/2400 毫秒后执行,而不是按预期在超时后执行。您可以通过在您的演示中放置一个console.log(i);
或来检查这一点,并在页面加载后立即查看 3 个日志行/警报。alert(i);
i++
我会将标记作为 HTML,而不是在 JavaScript 中创建它,然后在 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函数的回调.fadeOut()
(第二个)参数,以便在 fadeOut 完成后.fadeIn()
启动。
我确信这里有改进的余地,但希望它仍然有用。