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 deux setInterval peuvent se stopper alternativement ?


Sujet :

JavaScript

  1. #1
    Membre habitué
    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
    Points : 144
    Points
    144
    Par défaut Comment deux setInterval peuvent se stopper alternativement ?
    Bonjour

    J'ai deux setInterval qui lancent chacun une action, l'un augmente une valeur et l'autre la diminue.
    Donc quand l'un démarre il faut qu'il stoppe l'autre, car on ne peut pas à la fois augmenter une valeur et la diminuer, il faut que ce soit alternatif.

    Celui qui augmente est démarré par onmouseover() et celui qui diminue est démarré par onmouseout().

    Mon problème c'est que le nom du setInterval n'est pas reconnu par celui qui veut le stopper.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function augmente(){
       var valeur++;
       console.log(valeur);
    }
     
    function diminue(){
       var valeur--;
       console.log(valeur);
    }
     
    boite.onmouseover=function(){plus=setInterval("augmente();", 100);}
     
    boite.onmouseout=function(){moins=setInterval("diminue();", 100);}

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

    Informations professionnelles :
    Activité : Technicien

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

    Les variables utilisées par les fonctions doivent être préalablement déclarées.

    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
    var plus, moins, valeur=0; // Déclaration globale
     
    function augmente(){
    	valeur++;
    	clearInterval(moins);
    	console.log(valeur);
    }
     
    function diminue(){
    	valeur--;
    	clearInterval(plus);
    	console.log(valeur);
    }
     
    boite.onmouseover=function(){plus=setInterval(augmente, 100);}
     
    boite.onmouseout=function(){moins=setInterval(diminue, 100);}
    EDIT : En fait pour éviter d'avoir trop de variables globales, il est préférable d'utiliser une closure. Ainsi les variables nécessaires à la fonction restent "privées".

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    var myFunction=function(){
    	var id,value,step,byStep,delay;
     
    	function show(){
    		value+=step;
    		console.log('valeur : '+value + ' ; Pas : '+step);
    	}
     
    	return{
    		augmente:function(){
    			step=+byStep;
    			if(!id)id=setInterval(show,delay)
    		},
    		diminue:function(){
    			step=-byStep;
    			if(!id)id=setInterval(show,delay)
    		},
    		setValues:function(v,d,s){
    			if(id){clearInterval(id);id=null}
    			value=typeof v=='number'?v:0;
    			delay=typeof d=='number'?d:100;
    			byStep=typeof s=='number'?Math.abs(s):1;
    		}
    	};
    }();
     
    var boite=document.getElementById('boite');
     
    myFunction.setValues(0,500,2); // La valeur initiale 0 sera modifiée toutes les 1/2 secondes par pas de 2
     
    boite.onmouseover=myFunction.augmente; 
    boite.onmouseout=myFunction.diminue;

  3. #3
    Membre habitué
    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
    Points : 144
    Points
    144
    Par défaut
    Je te remercie de ton aide
    Tes explications sont très utiles pour moi, je vais essayer de comprendre ces closures grace à ton code et sur un tuto, Merci encore, je vais tester tout ça, au premier abord ça semble pas évident

  4. #4
    Membre habitué
    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
    Points : 144
    Points
    144
    Par défaut
    Merci je suis super content ça marche, il faut que je me plonge un peu plus dans ces closures c'est magique

    Je mets en résolu ^^

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

Discussions similaires

  1. Comment stopper un setInterval() ?
    Par lerieure dans le forum jQuery
    Réponses: 2
    Dernier message: 27/10/2012, 17h52
  2. Deux plugins peuvent-ils avoir le même raccourci ?
    Par el_jefe dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 18/02/2011, 01h42
  3. comment remplacer setInterval
    Par bil_home dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 03/08/2009, 11h24
  4. Réponses: 3
    Dernier message: 24/01/2005, 00h27
  5. comment lier deux tables?????
    Par baboune dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/03/2004, 14h45

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