J'ai un morceau de js sur mon site Web pour changer d'image, mais j'ai besoin d'un délai lorsque vous cliquez une deuxième fois sur l'image. Le délai doit être de 1000 ms. Donc, vous cliqueriez sur le img.jpg puis le img_onclick.jpg apparaîtrait. Vous cliqueriez alors sur l'image img_onclick.jpg, il devrait alors y avoir un délai de 1000 ms avant que le img.jpg ne soit à nouveau affiché.
Voici le code:
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
Bleu Orange
la source
la source
setTimeout(function(){/*YourCode*/},1000);
.stop()
cependant. Jetez un œil ici api.jquery.com/stopRéponses:
Utilisez
setTimeout()
:Si vous voulez le faire sans
setTimeout
: Référez-vous à cette question .la source
Placez votre code à l'intérieur du
{ }
500
= 0,5 seconde2200
= 2,2 secondesetc.
la source
Solution ES-6
Voici un exemple de code qui utilise aync / await pour avoir un délai réel.
Il y a beaucoup de contraintes et cela peut ne pas être utile, mais il suffit de poster ici pour le plaisir.
la source
delay
fonction soit asynchrone. Ce délai impressionnant fonctionne lorsqu'une promesse retournée par une fonction régulière est attendue dans le corps d'une fonction asynchrone.Il existe deux types (principalement utilisés) de fonction de minuterie en javascript
setTimeout
etsetInterval
( autre )Ces deux méthodes ont la même signature. Ils prennent une fonction de rappel et un temps de retard comme paramètre.
setTimeout
s'exécute une seule fois après le délai alors quesetInterval
continue d'appeler la fonction de rappel après chaque délai millisecs.ces deux méthodes retournent un identificateur entier qui peut être utilisé pour les effacer avant l'expiration du minuteur.
clearTimeout
etclearInterval
ces deux méthodes prennent un identifiant entier renvoyé par les fonctions ci-dessussetTimeout
etsetInterval
Exemple:
setTimeout
Si vous exécutez le code ci-dessus, vous verrez qu'il alerte
before setTimeout
etafter setTimeout
enfin il alerteI am setTimeout
après 1sec (1000ms)Ce que vous pouvez remarquer à partir de l'exemple est que le
setTimeout(...)
est asynchrone, ce qui signifie qu'il n'attend pas que le minuteur se soit écoulé avant de passer à l'instruction suivante, c'est-à-direalert("after setTimeout");
Exemple:
setInterval
Si vous exécutez le code ci-dessus, vous verrez qu'il alerte
before setInterval
etafter setInterval
enfin il alerteI am setInterval
5 fois après 1sec (1000ms) car le setTimeout efface la minuterie après 5 secondes ou toutes les 1 seconde, vous recevrez une alerte à l'I am setInterval
infini.Comment le navigateur fait-il cela en interne?
Je vais vous expliquer brièvement.
Pour comprendre que vous devez connaître la file d'attente d'événements en javascript. Une file d'attente d'événements est implémentée dans le navigateur. A chaque fois qu'un événement est déclenché dans js, tous ces événements (comme le clic, etc.) sont ajoutés à cette file d'attente. Lorsque votre navigateur n'a rien à exécuter, il prend un événement de la file d'attente et les exécute un par un.
Désormais, lorsque vous appelez
setTimeout
ou quesetInterval
votre rappel est enregistré dans un minuteur dans le navigateur et qu'il est ajouté à la file d'attente d'événements après l'expiration du délai imparti, javascript prend l'événement de la file d'attente et l'exécute.Cela arrive, car les moteurs javascript sont à thread unique et ne peuvent exécuter qu'une seule chose à la fois. Ainsi, ils ne peuvent pas exécuter d'autres javascript et garder une trace de votre minuterie. C'est pourquoi ces minuteries sont enregistrées avec le navigateur (le navigateur n'est pas à thread unique) et il peut garder une trace du minuteur et ajouter un événement dans la file d'attente après l'expiration du minuteur.
la même chose se produit
setInterval
uniquement dans ce cas, l'événement est ajouté à la file d'attente encore et encore après l'intervalle spécifié jusqu'à ce qu'il soit effacé ou que la page du navigateur soit actualisée.Par conséquent, votre rappel peut parfois prendre plus que le délai spécifié pour être appelé, spécialement lorsque votre autre code bloque le thread et ne lui laisse pas le temps de traiter ce qui se trouve dans la file d'attente.
Et comme je l'ai mentionné, javascript est un fil unique. Donc, si vous bloquez le fil pendant longtemps.
Comme ce code
Votre utilisateur peut recevoir un message indiquant que la page ne répond pas .
la source
setTimeout
si vous ne voulez pas de comportement asynchrone.Pour les appels de synchronisation, vous pouvez utiliser la méthode ci-dessous:
la source
Si vous avez besoin de rafraîchissement, voici une autre possibilité:
la source
Voici ce que je fais pour résoudre ce problème. Je conviens que cela est dû au problème de synchronisation et qu'il fallait une pause pour exécuter le code.
Ce nouveau code le mettra en pause pendant 1 seconde et exécutera pendant ce temps votre code.
la source
Je vais donner mon avis car cela m'aide à comprendre ce que je fais.
Pour créer un diaporama à défilement automatique avec une attente de 3 secondes, j'ai effectué les opérations suivantes:
Souvenez-vous que lors de l'exécution de setTimeout () comme ceci; il exécutera toutes les fonctions de temporisation comme si elles étaient exécutées en même temps en supposant que dans setTimeout (nextImage, delayTime); le temps de retard est un 3000 millisecondes statique.
Ce que j'ai fait pour tenir compte de cela, c'est d'ajouter 3000 milli / s supplémentaires après chaque incrémentation de boucle pour via
delayTime += timeIncrement;
.Pour ceux qui se soucient, voici à quoi ressemble ma nextImage ():
la source