Вы используете как цикл while (который будет работать синхронно до завершения без задержки), так и setInterval
.Вы захотите покончить с частью цикла while.
var displayedAmount = 0;
var updateInterval = setInterval(updateAmount, 10)
function updateAmount() {
if (displayedAmount >= amount) {
clearInterval(updateInterval);
return;
}
displayedAmount++;
document.getElementById("amount").value = displayedAmount;
}
Лучший подход, который будет работать лучше, - это использовать кадры анимации.Определите скорость изменения, которую вы хотите, например:
const changePerMillisecond = 0.001; // 1 dollar? per second
... или:
const changePerMillisecond = total / 5000; // Animation always takes 5 seconds
... и затем вы можете использовать этот цикл анимации:
const startTime = Date.now();
let displayedAmount = 0;
function animateValue() {
const timeTranspired = Date.now() - startTime;
displayedAmount = Math.min(value, timeTranspired * changePerMillisecond);
document.getElementById("amount").value = displayedAmount.toFixed(2);
if (displayedAmount < amount)
requestAnimationFrame(animateValue);
}
requestAnimationFrame(animateValue);