J'ai écrit une fonction javascript qui utilise setInterval pour manipuler une chaîne tous les dixièmes de seconde pendant un certain nombre d'itérations.
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);
};
Au lieu d'avoir l'intervalle fixé à un nombre spécifique, je voudrais le mettre à jour à chaque fois qu'il s'exécute, en fonction d'un compteur. Donc au lieu de:
var interval = setInterval(function() { ... }, 100);
Ce serait quelque chose comme:
var interval = setInterval(function() { ... }, 10*counter);
Malheureusement, cela n'a pas fonctionné. Il semblait que "10 * compteur" égale 0.
Alors, comment puis-je ajuster l'intervalle chaque fois que la fonction anonyme s'exécute?
la source
--t
devrait probablement êtret--
jsfiddle.net/albertjan/by5fdtimes
est trop grande?t
totick
, qui était ma meilleure estimation quant à ce que "t" est censé représenter.t
est un nom de variable assez mauvais.Vous pouvez utiliser une fonction anonyme:
MISE À JOUR: Comme suggéré par A. Wolff, utilisez
setTimeout
pour éviter le besoin declearInterval
.la source
J'aime cette question - a inspiré un petit objet de minuterie en moi:
Exemple d'utilisation
la source
J'avais la même question que l'affiche originale, je l'ai fait comme solution. Je ne sais pas à quel point c'est efficace ....
la source
setInterval
est fausse @RozzA - Il est toujours soumis aux mêmes retards que tout autre JavaScript, et presque tous les navigateurs fixent également setInterval à 4ms. Avez-vous un lien vers un article sur ceci ou quelque chose?C'est ma façon de faire, j'utilise setTimeout:
Usage:
la source
set_interval
fonction pour ne PAS lancer une nouvelle exécution à moins que le nouvel intervalle ne soit plus petit que l'ancien.if (iv < this.iv) { clearInterval(this.timeout); this.start(false, iv); } else { this.iv = iv; }
Un moyen beaucoup plus simple serait d'avoir une
if
instruction dans la fonction rafraîchie et un contrôle pour exécuter votre commande à intervalles de temps réguliers. Dans l'exemple suivant, j'exécute une alerte toutes les 2 secondes et l'intervalle (intrv
) peut être modifié dynamiquement ...la source
Cela peut être initié comme vous le souhaitez. timeout est la méthode que j'ai utilisée pour le garder en haut de l'heure.
J'avais besoin de chaque heure pour commencer un bloc de code sur l'heure. Donc, cela commencerait au démarrage du serveur et exécuterait l'intervalle toutes les heures. Fondamentalement, l'analyse initiale consiste à commencer l'intervalle dans la même minute. Donc, dans une seconde à partir de init, exécutez immédiatement puis toutes les 5 secondes.
Alternativement, si vous vouliez simplement que quelque chose se produise au début, puis pour toujours à un intervalle spécifique, vous pouvez simplement l'appeler en même temps que setInterval. Par exemple:
Ici, nous avons cette exécution la première fois, puis toutes les heures.
la source
La réponse simple est que vous ne pouvez pas mettre à jour un intervalle de minuterie déjà créé . (Il n'y a que deux fonctions
setInterval/setTimer
etclearInterval/clearTimer
, donc, avoir un,timerId
vous ne pouvez que le désactiver.) Mais vous pouvez faire quelques solutions de contournement. Jetez un œil à ce dépôt github .la source
Je ne pouvais pas synchroniser et modifier la vitesse de mes setIntervals aussi et j'étais sur le point de poster une question. Mais je pense avoir trouvé un moyen. Cela devrait certainement être amélioré car je suis un débutant. Je serais donc ravi de lire vos commentaires / remarques à ce sujet.
Si vous voulez que les compteurs pour commencer à augmenter une fois que la page est chargée, mis
counter1()
etcounter2()
enfoo()
avantcountingSpeed
est appelé. Sinon, il faut quelquesspeed
millisecondes avant l'exécution. EDIT: Réponse plus courte.la source
ne peut pas être plus court
la source
Je suis un débutant en javascript, et je n'ai trouvé aucune aide dans les réponses précédentes (mais beaucoup de bonnes idées).
Ce morceau de code ci-dessous accélère (accélération> 1) ou décélère (accélération <1). J'espère que cela pourrait aider certaines personnes:
Avec :
timer
: la valeur initiale de setInterval en ms (croissante ou décroissante)refresh
: le temps avant qu'une nouvelle valeur detimer
soit calculée. C'est la longueur du pasfactor
: l'écart entre l'ancienne et la prochainetimer
valeur. C'est la hauteur de marchela source
Faire une nouvelle fonction:
la source
Voici encore une autre façon de créer une minuterie d'intervalle de décélération / accélération. L'intervalle est multiplié par un facteur jusqu'à ce qu'un temps total soit dépassé.
la source
la source
Uncaught TypeError: interval is not a function
mais cela a fonctionné: jsfiddle.net/fgs5nwgnInspiré par le rappel interne ci-dessus, j'ai créé une fonction pour déclencher un rappel à des fractions de minutes. Si le délai d'expiration est défini sur des intervalles tels que 6 000, 15 000, 30 000, 60 000, il adaptera continuellement les intervalles synchronisés à la transition exacte vers la minute suivante de votre horloge système.
la source