我有2个数组(我从XML文件中读取):
urls
包含网址durations
包含表示秒数的整数我想遍历这些数组(到达终点时再次从0
开始),以便在iFrame中显示:
urls[0].innerHTML
durations[0]
秒
{li> urls[1].innerHTML
durations[1]
秒
{li> urls[2].innerHTML
durations[2]
秒
等...
为此,我有以下代码:
while (i <= len) {
$j('.marquee').attr('src',urls[i].innerHTML);
setTimeout(function(){
i++;
if (i >= len) {i = 0;}
},parseInt(duration[i].innerHTML) * 1000);
}
然后我意识到,在它到达第一个超时之前,它将在循环中运行一百万次以调用该函数并增加i
。
所以我想暂停代码,但我立即看到许多stackoverflow问题,这样做是一个非常糟糕的主意。
所以问题是,我该怎么做?
作为奖励问题......我应该在哪些网址之间使用fadeIn()和/或fadeOut()?
答案 0 :(得分:1)
这是一个简单的解决方案:
var i = 0;
(function step(){
$j('.marquee').attr('src',urls[i].innerHTML);
i = (i+1)%len;
setTimeout(step, parseInt(duration[i].innerHTML) * 1000);
})();
请注意,没有明确的循环。一次只编程一次超时。
如果你想添加fadein和fadeout,你必须在不同的帧(可能在同一位置)加载源并淡化它们。