Ich habe eine Funktion gemacht, die eine Zahl zu einer anderen erhöht. Das funktioniert aber meine Dauerlogik nicht.Einstellen der genauen Dauer für das Inkrementieren auf eine andere Nummer
Der dritte Parameter in .animateNumber()
ist Dauer, und ich möchte, dass dies die Zeit ist, die für das Inkrementieren der neuen Zahl aufgewendet wird.
Wenn also die Dauer auf 500 eingestellt ist, dauert es 500 Millisekunden von 10 (Start) - 500 (Ende), und dies ist für alle Anfangs- und Endwerte gleich.
http://jsbin.com/kepibetuxu/edit?html,js,console,output
HTMLElement.prototype.animateNumber = function(start, end, duration) {
this.style.opacity = 0.5;
var self = this,
range = end - start,
current = start,
increment = end > start? 1 : -1,
stepTime = duration/range,
timer = setInterval(function() {
current += increment;
self.innerHTML = current;
if (current == end) {
self.style.opacity = 1;
clearInterval(timer);
}
}, stepTime);
console.log(range);
console.log(stepTime);
};
document.querySelector('.value').animateNumber(400, 500, 20);
document.querySelector('.value1').animateNumber(0, 500, 20);
<div class="value">0</div>
<div class="value1">0</div>
Wie kann ich meine Steptime Logik zu beheben, dies zu tun?
So funktioniert setTimeout nicht. Es registriert Ereignisse zu bestimmten Ticks. Sie sollten in [requestAnimationFrame] (https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame) schauen – Rajesh