web-dev-qa-db-fra.com

Comment créer une fonction de délai javascript

J'ai un fichier javascript, et à plusieurs endroits, je veux ajouter un petit retard, pour que le script atteigne ce point, attende 3 secondes, puis continue avec le reste du code. La meilleure façon de procéder était de créer une fonction que je pouvais appeler de n’importe où dans le script.

function startDelay(lengthOfDelay)
{
//code to make it delay for lengthOfDelay amount of time
}

Cependant, je ne trouve aucun moyen d'implémenter le code pour le faire attendre. J'ai jeté un œil à setTimeout, mais vous deviez coder la fonction en dur, ce qui ne la rendait pas bonne pour moi.

Existe-t-il un moyen de faire en sorte que le script fasse une pause de quelques secondes? Je n'ai aucun problème avec le gel de l'interface utilisateur pendant que le code est en pause.

Sinon, y a-t-il un moyen d'utiliser les PHP sleep () pour y parvenir? (Je sais que PHP est côté serveur et que Javascript est côté client, mais il y a peut-être un moyen dont je n'ai pas entendu parler.)

17
user2370460

Vous n'avez pas besoin d'utiliser une fonction anonyme avec setTimeout. Vous pouvez faire quelque chose comme ça:

setTimeout(doSomething, 3000);

function doSomething() {
   //do whatever you want here
}
41
Kassem

Je viens de trouver cette réponse sur un autre forum: JavaScript veille/attend avant de continuer

Merci pour toutes vos réponses.

3
user2370460

Ah oui. Bienvenue dans l'exécution asynchrone.

Fondamentalement, suspendre un script aurait pour conséquence que le navigateur et la page ne répondent plus pendant 3 secondes. C'est horrible pour les applications Web et n'est donc pas pris en charge.

Au lieu de cela, vous devez penser "basé sur les événements". Utilisez setTimeout pour appeler une fonction après un certain temps, qui continuera à exécuter le code JavaScript sur la page pendant ce temps.

2
DanRedux

Vous pouvez créer un délai en utilisant l'exemple suivant

setInterval(function(){alert("Hello")},3000);

Remplacer 3000 par # de millisecondes

Vous pouvez placer le contenu de ce que vous voulez exécuter dans la fonction.

0
CBC_NS