He escrito una función de JavaScript que usa setInterval para manipular una cadena cada décima de segundo durante un cierto número de iteraciones.
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);
};
En lugar de tener el intervalo establecido en un número específico, me gustaría actualizarlo cada vez que se ejecuta, basado en un contador. Entonces en lugar de:
var interval = setInterval(function() { ... }, 100);
Sería algo así como:
var interval = setInterval(function() { ... }, 10*counter);
Lamentablemente, eso no funcionó. Parecía que "10 * counter" es igual a 0.
Entonces, ¿cómo puedo ajustar el intervalo cada vez que se ejecuta la función anónima?
fuente
--t
probablemente debería sert--
jsfiddle.net/albertjan/by5fdtimes
es demasiado grande?t
totick
, que fue mi mejor suposición en cuanto a lo que se supone que significa "t".t
es un nombre de variable bastante malo.Podría usar una función anónima:
ACTUALIZACIÓN: Según lo sugerido por A. Wolff, use
setTimeout
para evitar la necesidad declearInterval
.fuente
Me gusta esta pregunta, inspiró un pequeño objeto temporizador en mí:
Ejemplo de uso
fuente
Tenía la misma pregunta que el póster original, hice esto como una solución. No estoy seguro de cuán eficiente es esto ...
fuente
setInterval
es incorrecto @RozzA: todavía está sujeto a los mismos retrasos que cualquier otro JavaScript, y casi todos los navegadores también fijan setInterval a 4 ms. ¿Tienes un enlace a una publicación sobre esto o algo así?Esta es mi forma de hacerlo, uso setTimeout:
Uso:
fuente
set_interval
función para NO iniciar una nueva ejecución a menos que el nuevo intervalo sea más pequeño que el anterior ...if (iv < this.iv) { clearInterval(this.timeout); this.start(false, iv); } else { this.iv = iv; }
Una forma mucho más simple sería tener una
if
declaración en la función actualizada y un control para ejecutar su comando a intervalos de tiempo regulares. En el siguiente ejemplo, ejecuto una alerta cada 2 segundos y el intervalo (intrv
) se puede cambiar dinámicamente ...fuente
Esto se puede iniciar como quieras. el tiempo de espera es el método que utilicé para mantenerlo en la cima de la hora.
Tenía la necesidad de cada hora para comenzar un bloque de código en la hora. Entonces, esto comenzaría al inicio del servidor y ejecutaría el intervalo cada hora. Básicamente, la ejecución inicial es comenzar el intervalo dentro del mismo minuto. Entonces, en un segundo desde init, ejecute inmediatamente cada 5 segundos.
Alternativamente, si desea que algo suceda al inicio y luego para siempre en un intervalo específico, puede llamarlo al mismo tiempo que setInterval. Por ejemplo:
Aquí tenemos esta ejecución la primera vez y luego cada hora.
fuente
La respuesta simple es que no puede actualizar un intervalo de temporizador ya creado . (Solo hay dos funciones
setInterval/setTimer
yclearInterval/clearTimer
, por lo tanto, tener unatimerId
solo puede desactivarla). Pero puede hacer algunas soluciones. Echa un vistazo a este repositorio de Github .fuente
No pude sincronizar y cambiar la velocidad de mis SetIntervals también y estaba a punto de publicar una pregunta. Pero creo que he encontrado el camino. Sin duda debería mejorarse porque soy un principiante. Por lo tanto, con mucho gusto leería sus comentarios / observaciones sobre esto.
Si desea que los contadores que comienzan a aumentar una vez que se carga la página, poner
counter1()
ycounter2()
enfoo()
antes decountingSpeed
que se llama. De lo contrario, tomaspeed
milisegundos antes de la ejecución. EDITAR: respuesta más corta.fuente
no puede acortarse
fuente
Soy un principiante en javascript y no encontré ninguna ayuda en las respuestas anteriores (pero muchas buenas ideas).
Este fragmento de código a continuación acelera (aceleración> 1) o desacelera (aceleración <1). Espero que pueda ayudar a algunas personas:
Con :
timer
: el valor inicial setInterval en ms (aumentando o disminuyendo)refresh
: el tiempo antes de quetimer
se calcule un nuevo valor de . Este es el paso largofactor
: la brecha entre el valor anterior y el siguientetimer
. Esta es la altura del escalónfuente
Hacer nueva función:
fuente
Aquí hay otra forma de crear un temporizador de intervalo de desaceleración / aceleración. El intervalo se multiplica por un factor hasta que se excede el tiempo total.
fuente
fuente
Uncaught TypeError: interval is not a function
pero esto funcionó: jsfiddle.net/fgs5nwgnInspirado por la devolución de llamada interna anterior, hice una función para disparar una devolución de llamada a fracciones de minutos. Si el tiempo de espera se establece en intervalos como 6 000, 15 000, 30 000, 60 000, adaptará continuamente los intervalos sincronizados a la transición exacta al siguiente minuto del reloj de su sistema.
fuente