我正在尝试从这个数组中获取一个图像,使用Javascript每两秒显示一次,但我似乎无法让它工作。 id正确且图像位置正确且拼写正确。不知道出了什么问题,任何帮助将不胜感激!提前谢谢!
var images = new Array();
images[0] = "images/slideshowimage1.jpg";
images[1] = "images/slideshowimage2.jpg";
images[2] = "images/slideshowimage3.jpg";
images[3] = "images/slideshowimage4.jpg";
var counter = 0;
function ChangePic()
{
counter++;
document.getElementById('carpic').src = images[counter];
if(counter == images.length)
{
counter = 0;
}
setTimeout("ChangePic()",2000)
}
答案 0 :(得分:0)
您应该删除setTimeout
函数中的双引号和大括号。
应该是:
setTimeout(ChangePic, 2000);
答案 1 :(得分:0)
好吧,首先你需要在函数中的setTimeout中包装调用,而不是字符串。
其次,计数器永远不会达到值0,因为你从一开始就将它的值增加1。你想做这样的事情:
var images = new Array();
images[0] = "images/slideshowimage1.jpg";
images[1] = "images/slideshowimage2.jpg";
images[2] = "images/slideshowimage3.jpg";
images[3] = "images/slideshowimage4.jpg";
var counter = 0;
function ChangePic()
{
document.getElementById('carpic').src = images[counter];
// a more efficient if/else statement can be written like this:
// don't forget that the array starts with 0, so you need array length -1
(counter == images.length-1) ? counter = 0 : counter++;
}
// need to move this out of the ChangePic function
setTimeout(function() {ChangePic()}, 2000);
答案 2 :(得分:0)
语法错误是setTimeout
的参数。它应该是setTimeout(ChangePic, 2000)
,而不是setTimeout("ChangePic()", 2000)
。
逻辑错误位于增量位置counter++
- 在其当前位置,最终将用作数组images[]
的索引的值将为1,2, 3.永远不会使用索引0(images[]
中的第一项),因为counter
总是在用作索引之前递增(使得它在使用时不可能为0) )。您想要做的是在之后移动counter++
,将其用作images[]
的索引。
尽可能少地调整代码,这可能是它的样子:
var images = new Array();
images[0] = "images/slideshowimage1.jpg";
images[1] = "images/slideshowimage2.jpg";
images[2] = "images/slideshowimage3.jpg";
images[3] = "images/slideshowimage4.jpg";
var counter = 0;
function ChangePic() {
document.getElementById('carpic').src = images[counter];
counter++;
if (counter == images.length) {
counter = 0;
}
setTimeout(ChangePic, 2000)
}
// Call function at end to begin slideshow cycle
ChangePic();
这是一个JSFiddle来向您展示它的作用。 (打开浏览器的调试控制台查看输出。)希望这是你要找的!如果没有,请告诉我,我会很乐意进一步提供帮助。