Tengo esto un poco de js en mi sitio web para cambiar las imágenes, pero necesito un retraso al hacer clic en la imagen por segunda vez. El retraso debe ser de 1000 ms. Entonces haría clic en img.jpg y luego aparecería img_onclick.jpg. Luego, debe hacer clic en la imagen img_onclick.jpg y luego debería haber un retraso de 1000 ms antes de que se muestre nuevamente img.jpg.
Aquí está el código:
jQuery(document).ready(function($) {
$(".toggle-container").hide();
$(".trigger").toggle(function () {
$(this).addClass("active");
$(".trigger").find('img').prop('src', 'http://localhost:8888/images/img_onclick.jpg');
}, function () {
$(this).removeClass("active");
$(".trigger").find('img').prop('src', 'http://localhost:8888/images/img.jpg');
});
$(".trigger").click(function () {
$(this).next(".toggle-container").slideToggle();
});
});
javascript
jquery
Azul naranja
fuente
fuente
setTimeout(function(){/*YourCode*/},1000);
.stop()
sin embargo. Echa un vistazo aquí api.jquery.com/stopRespuestas:
Uso
setTimeout()
:Si desea hacerlo sin
setTimeout
: consulte esta pregunta .fuente
Coloque su código dentro del
{ }
500
= 0.5 segundos2200
= 2.2 segundosetc.
fuente
Solución ES-6
A continuación se muestra un código de muestra que usa aync / await para tener un retraso real.
Hay muchas limitaciones y esto puede no ser útil, pero solo publicar aquí por diversión.
fuente
delay
función sea asíncrona. Este impresionante retraso funciona cuando se espera una Promesa devuelta por una función regular en el cuerpo de una función asíncrona.Hay dos tipos (principalmente utilizados) de función de temporizador en javascript
setTimeout
ysetInterval
( otros )Ambos métodos tienen la misma firma. Toman una función de devolución de llamada y demoran el tiempo como parámetro.
setTimeout
se ejecuta solo una vez después de la demora, mientras quesetInterval
sigue llamando a la función de devolución de llamada después de cada milisegundo de demora.ambos métodos devuelven un identificador entero que se puede usar para borrarlos antes de que expire el temporizador.
clearTimeout
yclearInterval
ambos métodos toman un identificador entero devuelto de las funciones anterioressetTimeout
ysetInterval
Ejemplo:
setTimeout
Si ejecuta el código anterior, verá que alerta
before setTimeout
yafter setTimeout
finalmente alertaI am setTimeout
después de 1 segundo (1000 ms)Lo que puede observar en el ejemplo es que
setTimeout(...)
es asíncrono, lo que significa que no espera a que transcurra el temporizador antes de pasar a la siguiente instrucción, es deciralert("after setTimeout");
Ejemplo:
setInterval
Si ejecuta el código anterior, verá que alerta
before setInterval
yafter setInterval
finalmente alertaI am setInterval
5 veces después de 1 segundo (1000 ms) porque setTimeout borra el temporizador después de 5 segundos o, de lo contrario, cada 1 segundo recibirá alertaI am setInterval
infinitamente.¿Cómo hace eso el navegador internamente?
Te lo explicaré brevemente.
Para entender que tienes que saber sobre la cola de eventos en javascript. Hay una cola de eventos implementada en el navegador. Cada vez que se desencadena un evento en js, todos estos eventos (como clics, etc.) se agregan a esta cola. Cuando su navegador no tiene nada que ejecutar, toma un evento de la cola y los ejecuta uno por uno.
Ahora, cuando llame
setTimeout
osetInterval
su devolución de llamada se registre en un temporizador en el navegador y se agregue a la cola de eventos después de que expire el tiempo dado y, finalmente, javascript toma el evento de la cola y lo ejecuta.Esto sucede porque el motor de JavaScript tiene un solo subproceso y solo pueden ejecutar una cosa a la vez. Por lo tanto, no pueden ejecutar otros javascript y realizar un seguimiento de su temporizador. Es por eso que estos temporizadores están registrados con el navegador (el navegador no tiene un solo subproceso) y puede realizar un seguimiento del temporizador y agregar un evento en la cola después de que expire el temporizador.
Lo mismo ocurre
setInterval
solo en este caso, el evento se agrega a la cola una y otra vez después del intervalo especificado hasta que se borra o se actualiza la página del navegador.Por lo tanto, su devolución de llamada en algún momento puede tardar más que el tiempo de retraso especificado para ser llamado especialmente cuando su otro código bloquea el hilo y no le da tiempo para procesar lo que hay en la cola.
Y como mencioné, javascript es un solo hilo. Entonces, si bloquea el hilo por mucho tiempo.
Como este código
Su usuario puede recibir un mensaje que dice que la página no responde .
fuente
setTimeout
si no se desea un comportamiento asincrónico.Para las llamadas de sincronización, puede usar el siguiente método:
fuente
Si necesita actualizar, esta es otra posibilidad:
fuente
Esto es lo que estoy haciendo para resolver este problema. Estoy de acuerdo en que esto se debe al problema de tiempo y necesitaba una pausa para ejecutar el código.
Este nuevo código lo pausará durante 1 segundo y, mientras tanto, ejecutará su código.
fuente
Daré mi opinión porque me ayuda a entender lo que estoy haciendo.
Para hacer una presentación de diapositivas de desplazamiento automático que tiene una espera de 3 segundos, hice lo siguiente:
Recuerde que cuando ejecute setTimeout () de esta manera; ejecutará todas las funciones de tiempo de espera como si se ejecutaran al mismo tiempo, suponiendo que en setTimeout (nextImage, delayTime); el tiempo de retraso es de 3000 milisegundos estáticos.
Lo que hice para explicar esto fue agregar 3000 mili / s adicionales después de cada uno para aumentar el bucle a través de
delayTime += timeIncrement;
.Para aquellos que se preocupan por esto, así es mi nextImage ():
fuente