IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Comment répéter une fonction un nombre de fois à la vitesse voulue ?


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut Comment répéter une fonction un nombre de fois à la vitesse voulue ?
    Salut

    Quelqu'un saurait comment on fait en javaScript pour faire se répéter une fonction pendant un nombre de fois voulu et pas trop vite ?
    Par exemple un nombre de fois = 3
    Et vitesse je sais pas, disons 1000 ms.

    Dans la barre de recherche si je saisis "répéter fonction" ça me mène à rien de concret.

  2. #2
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    Tu as le choix entre

    setTimeout
    Exécute un morceau de code ou une fonction après un délai determiné.
    ou
    setInterval
    Appelle une fonction de manière répétée, avec un certain délai fixé entre chaque appel.

    Exemple avec setTimeout...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var max=3,current=0,str=['Premier','Deuxième','Troisième'];
     
    function traitement(){
    	console.log(
    		str[current++] +	// str[current++] = Récuperation élément str[current] ; incrémentation de current
    		(current==max?' et dernier':'')+
    		' passage'
    	);
    	if(current<max)setTimeout(traitement,1000);
    }
    traitement();

  3. #3
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    super !
    Merci eric2a, mais le setInterval il faut savoir l'arrêter non ? sinon il va continuer tout le temps ?

    En tous cas avec ton setTimeout ça a l'air bien je vais essayer, merci beaucoup pour cette solution !

  4. #4
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Citation Envoyé par progdebutant
    le setInterval il faut savoir l'arrêter non ? sinon il va continuer tout le temps ?
    Tout à fait.

    Pour pouvoir l'arrêter, il faut utiliser la méthode clearInterval avec pour paramètre, la valeur de retour du précédent appel à la méthode setInterval.

    Le même exemple avec la méthode setInterval.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var max=3,current=0,str=['Premier','Deuxième','Troisième'],timer;
     
    function traitement(){
    	console.log(
    		str[current++] +
    		(current==max?' et dernier':'')+
    		' passage'
    	);
    	if(current>=max)clearInterval(timer);
    }
     
    timer=setInterval(traitement,1000);// Mémoriser le retour qui sera utilisé par la méthode clearInterval

  5. #5
    Membre émérite Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Par défaut
    Bonsoir,

    Un proposition...

    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    var repeter = function (fct, n, d) {  
        var i = 0,
            timer = setInterval(function () {
                i += 1;
                fct('Itération n° ' + i + ' : ' + new Date().getTime());
                if (i === n) {
                    clearInterval(timer);
                }
            }, d);
    }
     
    repeter(function (msg) {
        console.log(msg);
    }, 3, 1000);

  6. #6
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    Merci beaucoup micetf !

    C'est vraiment cool l'entraide

    Eric2a grace à tes deux exemples je comprend mieux ce que je n'avais pas bien compris après moult recherches.

    EDIT :
    En fait j'ai cru que c'était bon mais en mettant mes valeurs j'ai foiré le truc je crois.
    Je n'ai pas encore essayé le code de micetf mais je le garde pour tester après, c'est bien que je sache faire de plusieurs façons et ça m'a permis de voir comment utiliser l'instruction autrement.

    J'ai un peu modifié (lol) la version de eric2a et bien sûr ça ne marche pas j'ai une erreur : "trop de répétition" et ça bloque l'action de mon code.

    Ce que je veux faire c'est lancer un certain nombre de fois une fonction "deplacement" (incrémentation ou décrémentation) d'une variable nommée "x".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    var x=0;
     
    function Deplace(numero,dir,compteur){
          if(dir==1) x=x+1;
          if(dir==2) x=x-1;
          console.log("element"+numero+" X="+x);break;
          compteur--;
          return compteur;
    }
     
    function Bouge(numero,dir,compteur){
    	Deplace(numero,dir,compteur);
    	if(compteur>0){setTimeout(Bouge(numero,dir,compteur),1000);}
    }
     
    window.onload=function(){
    	Bouge(0,1,3); // numero de l'élement à bouger (0), direction (1), nombre de fois (3) 
     }
    Je crois que je n'ai pas bien saisi le fonctionnement c'est bizarre car le principe est simple pourtant !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.Net] Comment implémenter une fonction BitWise ?
    Par graphicsxp dans le forum VB.NET
    Réponses: 6
    Dernier message: 20/04/2005, 15h52
  2. Réponses: 8
    Dernier message: 20/12/2004, 15h14
  3. Comment lancer une fonction
    Par Elois dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 21/04/2004, 19h10
  4. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13
  5. Comment chronométrer une fonction
    Par 323 dans le forum Pascal
    Réponses: 3
    Dernier message: 19/03/2003, 20h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo