[英]How can I write a function that takes X amount of seconds?
我想編寫一個運行非常接近5秒的javascript函數。 我該如何保證?
我努力了
function wait(numSeconds) {
var end = new Date().getMilliseconds() + numSeconds * 1000;
while (new Date().getMilliseconds() <= end) {}
}
但這只會使頁面崩潰。
您不能凍結頁面而不凍結頁面。
您正在嘗試編寫一個連續運行5秒的函數。
Javascript在UI線程上運行,因此只要運行任何代碼,頁面就會被凍結。
簡而言之,您無法做到這一點。
您可能需要使用setTimeout()
來編寫異步代碼 。
您可以使用:
var t = setTimeout(function(){alert('done')},5000);
如果要等待5秒鍾再做某事,請使用setTimeout或setInterval 。 否則,僅僅消耗用戶時間是一個壞主意。 實際上,如果執行某件事花費的時間太長,瀏覽器就會中斷您的腳本,而您的功能肯定會這樣做。
(暫時忽略您為什么不應該真正執行此操作...)
您的代碼凍結瀏覽器的原因是您的while
條件將永遠不會變為真( numSeconds
為1或更大)。
.getMilliseconds()
方法 僅返回日期的毫秒部分,即0到999之間的一個數字。對於numSeconds
(大於1),您的end
將始終大於999。
嘗試使用.getTime()
而不是.getMilliseconds()
。 或者,如果您不關心支持舊的瀏覽器,請使用Date.now()
。
您可以只使用javascripts setTimeout代替自己的等待函數。
setTimeout在一定時間后執行功能。
例如:
setTimeout(function(){}, 5000);
只需等待5秒鍾。
在w3schools中查看更多內容。
嚴格來說,您的要求無法完成,因為如您所見,頁面將在您等待時凍結。
但實際上,我懷疑您真正想要的是這樣的東西:
function waitawhile() {
setTimeout( function() {
alert('5 seconds has passed');
}, 5000);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.