为什么这个setTimeout解决方案不能在javascript中工作
Why this setTimeout workaround does not work in javascript?
我需要一个接一个地执行4个不同的代码片段,有一些延迟。我想出了这个技巧来创建简单的睡眠功能,但它并没有呈现出预期的结果。
function pauseScript (delay) {
setTimeout(function() { return true; }, delay);
}
....
//code to be delayed
if (pauseScript(1000)) {
document.getElementById("message1").style.visibility='visible';
}
...
if (pauseScript(1000)) {
document.getElementById("message4").style.visibility='visible';
}
//code to be executed after 4 messages are revealed
setTimeout
不阻塞脚本的执行。你应该这样做:
setTimeout(function() {
// code to be delayed
},1000);
在您的例子中,您似乎有四个消息要按顺序显示?试试这个:
setTimeout(function() {
var f = arguments.callee;
f.i = (f.i || 0)+1;
document.getElementById('message'+f.i).style.visibility = "visible";
if( f.i < 4) setTimeout(f,1000);
else {
// code to be run after all messages are shown.
}
},1000);
function pauseScript(callbacks, delay) {
for(var i = 0, len = callbacks.length; i < len; i++){
setTimeout(callbacks[i], (i + 1) * delay);
}
}
var getMessageDelegates = [
function(){
document.getElementById("message1").style.visibility='visible';
},...,
function(){
document.getElementById("message4").style.visibility='visible';
}
];
pauseScript(1000, getMessageDelegates);
setTimeout
不会暂停您的脚本。相反,它将调度您传递给它的函数,以便稍后异步执行。
我认为你想这样做:
setTimeout(function(){
document.getElementById("message1").style.visibility='visible';
}, 1000);
setTimeout(function(){
document.getElementById("message2").style.visibility='visible';
}, 2000);
setTimeout(function(){
document.getElementById("message3").style.visibility='visible';
}, 3000);
setTimeout(function(){
document.getElementById("message4").style.visibility='visible';
}, 4000);
相关文章:
- 在表单提交将DOM的一部分替换为分部之后,我应该将ajax成功绑定到什么来使我的javascript工作
- 我可以'不要让Javascript工作不正常
- 如何让我的html5功能不兼容警告使用javascript工作
- Excel Web Services 电子邮件 JavaScript 工作表
- 用于Google Fusion Table层的Javascript工作,但试图整理代码
- Bootstrap:如何附加一个类,并且仍然有BS Javascript工作
- JavaScript 工作队列
- JavaScript工作,直到我添加这个&&陈述
- 为什么不'在CasperJS中没有简单的JavaScript工作
- 如何"递归AJAX回调”;在JavaScript工作中
- 基本验证javascript工作不正常
- 需要帮助让这个字符串的Javascript工作
- HTML和JavaScript工作不正常
- 下拉菜单无法从CSS或Javascript工作
- 需要从erb生成一个非常特定的html来让javascript工作
- 如果javascript代码段未使用,它将阻止其他javascript工作
- 将内联事件处理程序移动到chrome扩展的javascript工作表
- 阻止其他Javascript工作的Javascript
- iframe阻止javascript工作
- 无法获取切换函数(JavaScript工作)