[英]how to add a delay in a while loop. JavaScript
function falling()
{
isFalling = true;
while (isFalling == true)
{
if (y < 120) {
y++;
}
else if (y == 120) {
isFalling = false;
}
}
}
我試過在整個循環、if 語句周圍、y++ 周圍添加 setTimeout(function()。我不知道我做錯了什么。任何時候我添加任何這些時,一旦下降函數,頁面就會變得無響應被調用。我很清楚這可能是一個重復的問題,但重復的問題沒有幫助。{ }, 100)
你會這樣做:
function falling(y) {
if (y < 120) {
setTimeout(falling.bind(this, y + 1), 100); // specify your delay.
}
}
falling(0);
這個問題確實已經回答過好幾次了, 這里的回答真的和這個沒有太大區別。
請注意,我刪除了明顯的全局變量isFalling
。 如果您確實需要在其他代碼中使用該變量,則可以按如下方式更新該變量:
function falling(y) {
isFalling = y < 120;
if (isFalling) {
setTimeout(falling.bind(this, y + 1), 100); // specify your delay.
}
}
我會使用 window.setInterval() 代替,因為您希望它重復直到某個數字
工作plunkr:
https://plnkr.co/edit/TbpplnIShiaJR7sHDUjP?p=preview
function falling()
{
var isFalling = true;
var y=0;
myInterval = window.setInterval(function() {
y++;
console.log(y);
if (y== 120) {
clearInterval(myInterval);
}
}, 100)
}
falling();
如果調用falling()的目的是暫時將全局變量的值設置為true (如您當前的代碼所建議的那樣),那么這應該可以解決問題。
var isFalling = false; function falling(fallDuration) { isFalling = true; console.log("now falling"); setTimeout(function(){ isFalling = false; console.log("landed"); }, fallDuration || 1000); } falling();
我想雖然你可能真的想跌倒然后繼續做其他事情。 在這種情況下,您可能想要查看回調或承諾。 你可以做一個簡單的:
var isFalling = false; function falling(fallDuration, andThen) { isFalling = true; console.log("now falling"); setTimeout(function() { isFalling = false; console.log("landed"); andThen(); }, fallDuration); } falling(1000, function(){ console.log("now standing"); });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.