2013-03-17 96 views
3

我试图在我的网站上显示/隐藏赞助商徽标,无休止地显示/隐藏一个接一个。我觉得我有点儿接近了,但是在敲了敲头之后,我决定是时候寻求帮助了。这里是我的代码:Javascript/JQuery通过数组值循环

var sponsors = ["prointec","pequigraf"]; 
for (var i = 0; i < sponsors.length; i++){ 
    setTimeout($(document.getElementById(sponsors[i])).slideToggle("slow", "swing"), 1000); 
    setTimeout($(document.getElementById(sponsors[i])).slideToggle("slow", "swing"), 10000 * (i + 1)); 
} 

基本上,它应该显示一个后另一个(10秒后),而是一次运行。任何提示?提前致谢!

+2

为什么人们downvoting这个问题?如果您对阅读/回答初学者的东西感到不舒服,请忽略它。看起来像在SO的一些人看到新手问题作为专门扑的游乐场。 – 2013-03-17 03:37:49

+0

为了防止任何人想要检查它的外观(或者如果有人想使用这个简单而有效的代码),下面是它的实现(它是英雄图像下方的黑色条):http://www.oficiografico。 com/ – 2013-03-17 13:46:44

回答

1

您需要给超时一个函数引用。你也应该嵌套你的超时。尝试在编写JavaScript时异步思考。

我还没有测试过这个,但这是我想出来的。还要注意的是十秒10,000毫秒,而不是1000

var sponsors = ["prointec","pequigraf"]; 

var i = 0; 

$(document.getElementById(sponsors[0])).show(); 
$(document.getElementById(sponsors[1])).hide(); 

var toggleSponsor = function() { 
    $(document.getElementById(sponsors[i])).hide(); 

    i = (i + 1) % sponsors.length; 
    $(document.getElementById(sponsors[i])).show(); 

    setTimeout(toggleSponsor, 10000); 
}; 

setTimeout(toggleSponsor, 10000); 
+0

这很整洁!像魅力一样工作!非常感谢! – 2013-03-17 03:37:10

+0

不客气。如果您希望我解释代码的任何部分,请问一下。 – rpamely 2013-03-17 03:39:22

2

我张贴此作为一个答案,而不是评论只是为了确保我可以做一些适当的代码格式。

rpamely的代码看起来像你所需要的,但你可以简化它很多。只需用'#'加前缀你的两个赞助商ID,你可以删除所有的document.getElementById()电话:

var sponsors = [ "#prointec","#pequigraf" ]; 

var i = 0; 

$(sponsors[0]).show(); 
$(sponsors[1]).hide(); 

var toggleSponsor = function() { 
    $(sponsors[i]).hide(); 

    i = (i + 1) % sponsors.length; 
    $(sponsors[i]).show(); 

    setTimeout(toggleSponsor, 10000); 
}; 

setTimeout(toggleSponsor, 10000); 
+0

谢谢Michael! – 2013-03-17 04:02:02