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
delayfunció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
setTimeoutysetInterval( otros )Ambos métodos tienen la misma firma. Toman una función de devolución de llamada y demoran el tiempo como parámetro.
setTimeoutse ejecuta solo una vez después de la demora, mientras quesetIntervalsigue 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.
clearTimeoutyclearIntervalambos métodos toman un identificador entero devuelto de las funciones anterioressetTimeoutysetIntervalEjemplo:
setTimeout
Si ejecuta el código anterior, verá que alerta
before setTimeoutyafter setTimeoutfinalmente alertaI am setTimeoutdespué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 setIntervalyafter setIntervalfinalmente alertaI am setInterval5 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 setIntervalinfinitamente.¿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
setTimeoutosetIntervalsu 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
setIntervalsolo 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
setTimeoutsi 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