Ich habe eine Javascript-Funktion geschrieben, die setInterval verwendet, um eine Zeichenfolge alle Zehntelsekunden für eine bestimmte Anzahl von Iterationen zu bearbeiten.
function timer() {
var section = document.getElementById('txt').value;
var len = section.length;
var rands = new Array();
for (i=0; i<len; i++) {
rands.push(Math.floor(Math.random()*len));
};
var counter = 0
var interval = setInterval(function() {
var letters = section.split('');
for (j=0; j < len; j++) {
if (counter < rands[j]) {
letters[j] = Math.floor(Math.random()*9);
};
};
document.getElementById('txt').value = letters.join('');
counter++
if (counter > rands.max()) {
clearInterval(interval);
}
}, 100);
};
Anstatt das Intervall auf eine bestimmte Zahl einzustellen, möchte ich es jedes Mal aktualisieren, wenn es ausgeführt wird, basierend auf einem Zähler. Also statt:
var interval = setInterval(function() { ... }, 100);
Es wäre so etwas wie:
var interval = setInterval(function() { ... }, 10*counter);
Das hat leider nicht funktioniert. Es schien, als ob "10 * Zähler" gleich 0 ist.
Wie kann ich das Intervall jedes Mal anpassen, wenn die anonyme Funktion ausgeführt wird?
quelle
--t
sollte wohlt--
jsfiddle.net/albertjan/by5fd seintimes
zu groß ist?t
intick
, was meine beste Vermutung war, wofür "t" stehen soll.t
ist ein ziemlich schlechter Variablenname.Sie könnten eine anonyme Funktion verwenden:
UPDATE: Verwenden Sie
setTimeout
, wie von A. Wolff vorgeschlagen, um die Notwendigkeit zu vermeidenclearInterval
.quelle
Ich mag diese Frage - inspiriert ein kleines Timer-Objekt in mir:
Beispiel Verwendung
quelle
Ich hatte die gleiche Frage wie das Originalplakat, tat dies als Lösung. Ich bin mir nicht sicher, wie effizient das ist ...
quelle
setInterval
falsch ist @RozzA - Es unterliegt immer noch den gleichen Verzögerungen wie bei jedem anderen JavaScript, und fast jeder Browser klemmt setInterval auch auf 4 ms. Hast du einen Link zu einem Beitrag darüber oder so?Dies ist meine Art, dies zu tun, ich benutze setTimeout:
Verwendung:
quelle
set_interval
Funktion so geändert , dass KEINE neue Ausführung gestartet wird, es sei denn, das neue Intervall ist kleiner als das alte.if (iv < this.iv) { clearInterval(this.timeout); this.start(false, iv); } else { this.iv = iv; }
Ein viel einfacherer Weg wäre, eine
if
Anweisung in der aktualisierten Funktion und ein Steuerelement zu haben, um Ihren Befehl in regelmäßigen Zeitintervallen auszuführen. Im folgenden Beispiel führe ich alle 2 Sekunden eine Warnung aus und das Intervall (intrv
) kann dynamisch geändert werden ...quelle
Dies kann beliebig initiiert werden. Timeout ist die Methode, mit der ich es auf dem neuesten Stand gehalten habe.
Ich musste jede Stunde einen Codeblock zu jeder vollen Stunde beginnen. Dies würde also beim Serverstart beginnen und das Intervall stündlich ausführen. Grundsätzlich besteht der erste Lauf darin, das Intervall innerhalb derselben Minute zu beginnen. Führen Sie also in einer Sekunde nach Init sofort alle 5 Sekunden aus.
Wenn Sie alternativ möchten, dass beim Start und dann für immer in einem bestimmten Intervall etwas passiert, können Sie es auch gleichzeitig mit dem setInterval aufrufen. Beispielsweise:
Hier haben wir diesen Lauf das erste Mal und dann jede Stunde.
quelle
Eine einfache Antwort ist, dass Sie ein Intervall des bereits erstellten Timers nicht aktualisieren können . (Es gibt nur zwei Funktionen,
setInterval/setTimer
undclearInterval/clearTimer
wenntimerId
Sie eine haben , können Sie sie nur deaktivieren.) Sie können jedoch einige Problemumgehungen vornehmen. Schauen Sie sich dieses Github-Repo an .quelle
Ich konnte meine setIntervals auch nicht synchronisieren und die Geschwindigkeit ändern und wollte gerade eine Frage stellen. Aber ich glaube ich habe einen Weg gefunden. Es sollte auf jeden Fall verbessert werden, weil ich ein Anfänger bin. Daher würde ich gerne Ihre Kommentare / Bemerkungen dazu lesen.
Wenn Sie möchten, dass die Zähler nach dem Laden der Seite ansteigen, wird put
counter1()
andcounter2()
infoo()
beforecountingSpeed
aufgerufen. Andernfalls dauert diespeed
Ausführung Millisekunden. EDIT: Kürzere Antwort.quelle
kann nicht kürzer werden
quelle
Ich bin ein Anfänger in Javascript und habe in den vorherigen Antworten keine Hilfe gefunden (aber viele gute Ideen).
Dieser Code unten beschleunigt (Beschleunigung> 1) oder verlangsamt (Beschleunigung <1). Ich hoffe es könnte einigen Leuten helfen:
Mit:
timer
: der setInterval-Anfangswert in ms (ansteigend oder abnehmend)refresh
: Die Zeit, bevor ein neuer Wert vontimer
berechnet wird. Dies ist die Schrittlängefactor
: die Lücke zwischen dem alten und dem nächstentimer
Wert. Dies ist die Stufenhöhequelle
Neue Funktion erstellen:
quelle
Hier ist eine weitere Möglichkeit, einen Verzögerungs- / Beschleunigungsintervall-Timer zu erstellen. Das Intervall wird mit einem Faktor multipliziert, bis eine Gesamtzeit überschritten wird.
quelle
quelle
Uncaught TypeError: interval is not a function
aber das hat funktioniert: jsfiddle.net/fgs5nwgnInspiriert von dem internen Rückruf oben, habe ich eine Funktion erstellt, um einen Rückruf in Bruchteilen von Minuten auszulösen. Wenn das Zeitlimit auf Intervalle wie 6 000, 15 000, 30 000, 60 000 eingestellt ist, werden die Intervalle kontinuierlich synchron an den genauen Übergang zur nächsten Minute Ihrer Systemuhr angepasst.
quelle