Javascript 某物';It’现在时机不对
运行时,此视图显示“Javascript 某物';It’现在时机不对,javascript,Javascript,运行时,此视图显示“est!T”。这告诉我时机不对。 我想要一条滚动消息,上面写着Test,每半秒移动一次 scroll() function scroll() { settext("Test! ") wait(500) settext(" Test!") wait(500) settext("! Test") wait(500) settext("t! Tes") wait(500) settext("st! Te") wait(500) settext("est! T") wait(500
est!T
”。这告诉我时机不对。我想要一条滚动消息,上面写着
Test代码>,每半秒移动一次
scroll()
function scroll() {
settext("Test! ")
wait(500)
settext(" Test!")
wait(500)
settext("! Test")
wait(500)
settext("t! Tes")
wait(500)
settext("st! Te")
wait(500)
settext("est! T")
wait(500)
}
function wait(a) {
self.setInterval(nothing,a)
}
function nothing() {}
function settext(text) {
document.getElementById("demo").innerHTML = text;
}
您不能在JavaScript函数中等待。这不是它的工作原理
当您使用setTimeout
(或setInterval
)时,发生的是。。。您告诉JavaScript在一定的毫秒数内运行传递的函数(或者每X毫秒运行一次)。它没有在那里运行传递的函数,而是推送到事件队列上
此代码所做的是调用settext()
更改innerHTML
,然后调用wait()
向事件队列添加(另一个)间隔
每隔500毫秒,nothing
功能将启动一次(这将发生6次…每500毫秒一次)
如果希望文本显示500毫秒,然后进行更改,则必须在setTimeout
内调用settext
。例如:
settext("Test! ");
setTimeout(function(){
settext(" Test!");
}, 500);
正如您所看到的,这可能会让您所有的settext
调用变得有点混乱。您可以做的一件事是使用数组保存所有可能的状态,然后使用一个setInterval
调用循环遍历它们
function scroll() {
var states = ["Test! ", " Test!", "! Test", "t! Tes", "st! Te", "est! T"],
currState = 0;
settext("Test! ");
currState++;
setInterval(function(){
settext(states[currState]);
currState++;
if(currState === states.length){
currState = 0;
}
}, 500);
}
哦,我想setinterval
的意思是“重复此任务直到[x]ms.pass”,而不是“每隔[x]ms.不确定地重复此任务”@user5428858:我很高兴我能澄清这一困惑,那么:-)