0
我有一個簡單的JS動畫進度條。每20ms,進度條的值增加0.25。所以需要20 * 4 * 100ms = 8秒才能完成進度條,如下面的JSFiddle所示。如何確保兩個setInterval持續同一時間
function updateProgress(currentValue, expectedValue){
var inProgress = setInterval(function() {
currentValue = currentValue + 0.25;
$('#progress-bar').attr('value', currentValue);
$('#progress-text').text(Math.round(currentValue));
if (currentValue == expectedValue) clearInterval(inProgress);
}, 20);
}
updateProgress(0, 100);
<progress id="progress-bar" value="0" max="100"></progress>
<div><span id="progress-text">0</span>%</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
所以,如果我採取相同的代碼,並開始在50%而不是0%的進度條,這將需要20 * 4 * 50毫秒= 4秒完成進度條,正如你可以在下面的JSFiddle中看到的那樣。
function updateProgress(currentValue, expectedValue){
var inProgress = setInterval(function() {
currentValue = currentValue + 0.25;
$('#progress-bar').attr('value', currentValue);
$('#progress-text').text(Math.round(currentValue));
if (currentValue == expectedValue) clearInterval(inProgress);
}, 20);
}
updateProgress(50, 100);
<progress id="progress-bar" value="50" max="100"></progress>
<div><span id="progress-text">50</span>%</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
我想的功能總是有相同的時間執行,初始值的無外觀。 例如0到 - > 100:4秒,50到 - > 100也是4秒。
我試過,但它不工作:
function updateProgress(currentValue, expectedValue){
var interval = 4000/(expectedValue - currentValue)/4;
var inProgress = setInterval(function() {
currentValue = currentValue + 0.25;
$('#progress-bar').attr('value', currentValue);
$('#progress-text').text(Math.round(currentValue));
if (currentValue == expectedValue) clearInterval(inProgress);
}, interval);
}
updateProgress(50, 100);
就是這樣,當我想從0到100持續200ms,所以我的間隔是200/100/4 = 0,5ms。而酒吧花了超過200毫秒的時間才完成,我找不到原因!非常感謝你的回答@skirtle – Vald