我有一个包含一些文字说明的数组。我希望一次显示一个元素,延时(10秒)。显示所有元素后,应该重新开始。
var d = 0;
var dataList = ["a","b","c"];//eg:
function ShowList()
{
do{
var descrip = dataList[d];
document.getElementById('section1').innerHTML = descrip;
d++;
setTimeout(ShowList(),10000);
}while(d < dataList.length);
}
ShowList();
我会尝试上面的代码,但不能正常工作。
答案 0 :(得分:3)
正如其他答案正确说的那样,你需要将函数本身传递给setTimeout
,而不是调用函数。
他们没有说的是使用循环在这里不起作用,因为setTimeout
是异步的。只需设置元素内容并调用setTimeout
:
var d = 0;
var dataList = ["a","b","c"];//eg:
function showList() {
var descrip = dataList[d];
document.getElementById('section1').innerHTML = descrip;
d = (d + 1) % dataList.length;
setTimeout(showList, 10000);
}
showList();
从头开始,我们使用模数运算符,因此d
始终在[0, d.length)
范围内。
答案 1 :(得分:3)
您可以改为使用setInterval()
。
setTimeout
在超时时执行一次该功能。setInterval
重复执行函数和interval
代码示例
var d = 0,
dataList = ['a', 'b', 'c'];
setInterval(function() {
var descrip = dataList[d];
document.getElementById('section1').innerHTML = descrip;
d++;
if (d >= dataList.length) {
d = 0;
}
}, 10000);
要停止间隔,请使用clearInterval()
答案 2 :(得分:1)
使用setTimeout(ShowList,10000);
代替setTimeout(ShowList(),10000);
答案 3 :(得分:0)
在setTimeout中,您必须指定函数的名称,而不是应用程序。当您编写func()
时,您正在执行该函数,结果将作为setTimeout的实际参数传递。例如,如果func()
返回2,那么当您撰写setTimeout(funct(), 1000)
时,就像您正在撰写setTimeout(2, 1000)
。
因此请写setTimeout(ShowList, 10000);