我已经在搜索/谷歌了很多关于JavaScript睡眠/等待的网页...但是如果你想让JavaScript "运行,延迟,运行",没有答案...大多数人得到的要么是"运行,运行(无用的东西),运行"或者"运行,运行+延迟运行"...
我想:
这里有一个可行的解决方案...但你必须把你的运行代码分开...:
是的,我知道,这只是一个更容易阅读的重构...仍然...
示例1:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
var i = 0;
function run() {
if (i == 0){document.getElementById("id1").innerHTML= "<p>code segment " + i + " is ran</p>"; }
if (i == 1){document.getElementById("id1").innerHTML= "<p>code segment " + i + " is ran</p>"; }
if (i == 2){document.getElementById("id1").innerHTML= "<p>code segment " + i + " is ran</p>"; }
if (i >2){document.getElementById("id1").innerHTML= "<p>code segment " + i + " is ran</p>"; }
if (i == 5){document.getElementById("id1").innerHTML= "<p>all code segment finished running</p>"; clearInterval(t); }
i++;
}
run();
t = setInterval("run()", 1000);
</script>
</body>
</html>
示例2:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
var i = 0;
function run() {
if (i == 0){document.getElementById("id1").innerHTML= "<p>code segment " + i + " ran</p>"; sleep(1000);}
if (i == 1){document.getElementById("id1").innerHTML= "<p>code segment " + i + " ran</p>"; sleep(2000);}
if (i == 2){document.getElementById("id1").innerHTML= "<p>code segment " + i + " ran</p>"; sleep(3000);}
if (i == 3){document.getElementById("id1").innerHTML= "<p>code segment " + i + " ran</p>";}
i++;
}
function sleep(dur) {t=setTimeout("run()", dur);}
run();
</script>
</body>
</html>
例子3:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
var i = 0;
function flow() {
run(i);
i++;
sleep(1000);
if (i == 5) {clearTimeout(t);}
}
function run(segment) {
if (segment == 0){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
if (segment == 1){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
if (segment == 2){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
if (segment >2){document.getElementById("id1").innerHTML= "<p>code segment "+ segment +" is ran</p>"; }
}
function sleep(dur) {t=setTimeout("flow()", dur);}
flow();
</script>
</body>
</html>
例子 4:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
var i = 0;
function flow() {
switch(i)
{
case 0:
run(i);
sleep(1000);
break;
case 1:
run(i);
sleep(2000);
break;
case 5:
run(i);
clearTimeout(t);
break;
default:
run(i);
sleep(3000);
break;
}
}
function run(segment) {
if (segment == 0){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
if (segment == 1){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
if (segment == 2){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
if (segment >2){document.getElementById("id1").innerHTML= "<p>code segment " + segment + " is ran</p>"; }
i++;
}
function sleep(dur) {t=setTimeout("flow()", dur);}
flow();
</script>
</body>
</html>
sleep()
来计时动画。(我知道有更好的方法...)提问者提供的代码在 Chrome 中对我无效,因为浏览器不会在脚本中进行修改后立即更新 DOM,而是等待代码执行完成后再进行任何 DOM 更新,因此脚本会等待所有延迟的总和,然后一次性应用所有 DOM 更新。 - Ari Fordsham