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 :

Boucle sur "OnMouseOver"


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Boucle sur "OnMouseOver"
    Bonjour,

    Débutant en javascript j'essaie de faire un petit script permettant au passage de la souris sur une image de déplacé une autre image.

    Pour ça aucun soucis l'image est décalé comme je le souhaite, mais ce décalage ne s'effectue qu'une seule fois, j'ai essayé de faire des fonctions que j'appelle avec "onmouseover" et "onmouseout" pour débuté et arrêté le déplacement mais cela ne fonctionne pas.

    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
     
    // La fonction de déplacement de l'objet	
    function bouge(x,y)
    {
     
     	if(document.getElementById)
    	{
    		hautimage += y;
    		gaucheimage += x;
    		document.getElementById("smile").style.top =hautimage;
    		document.getElementById("smile").style.left = gaucheimage;
    	}
     
    }
     
    // la fonction pour initialisé un déplacement
     
    function start(x,y,dep)
    {
         while(dep)
         {
             bouge(x,y);
          }
    }
     
    function stop()
    {
        dep=false;
    }
    Puis dans le code xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     
    < img src="./blabla.jpg" onmouseover="start(-10,0,true);" onmouseout="stop()">
    Je précise que l'image que je veut déplacer est inséré en javascript de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <SCRIPT LANGUAGE="javascript">
    var hautimage = 300;
    var gaucheimage = 300;
    document.write('<IMG SRC="./images/smile.gif" ID=smile STYLE="position:absolute;top:'+hautimage+';left:'+gaucheimage+'">');
    </SCRIPT>
    Cordialement.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    pour te répondre, il faudrait aussi voir les fonction start() et stop() que tu devrait d'ailleurs appeler par A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Elles sont dans le premier block de code =)

    Même en apellant la fonction par onmouseout="stop();" je n'obtient rien.
    A+

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par crackers-belin Voir le message
    Elles sont dans le premier block de code =)

    Même en apellant la fonction par onmouseout="stop();" je n'obtient rien.
    Arf !
    J'avais pas scrollé

    Il faut que tu transformes ton paramètre "dep" en variable globale, visiblement

    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Re
    Autant pour moi j'avais oublié ça, avant la fonction "bouge", je déclare dep de cette manière :

    var dep=false;

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Salut,
    dep est une paramètre de la fonction start et reste toujours true ce qui implique le boucle infinie que tu ne peux pas accéder depuis la fonction stop.

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    dep est une paramètre de la fonction start et reste toujours true ce qui implique le boucle infinie que tu ne peux pas accéder depuis la fonction stop.
    Voilà
    => Vire le paramètre de la fonction, pour que "dep" fasse toujours référence à la variable globale.

    A+

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Re
    aurait tu une idée pour évité ce problème de boucle infini, en rapellant la fonction start avec dep=false, ça pourrait fonctionné ?

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    => Vire le paramètre de la fonction, pour que "dep" fasse toujours référence à la variable globale.


    A+

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Re
    J'ai modifié mon code de cette manière :

    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 start(x,y)
    {
    	dep=true;
    	while(dep)
    	{
    		bouge(x,y);
    	}
    }
     
    function stop()
    {
    	dep=false;
    }
    Et il ne se passe toujours rien

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 265
    Points : 284
    Points
    284
    Par défaut
    Tu es sur que while(true) est accepte par le navigateur ?
    Je suis sceptique...

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Re
    Je ne sais pas si while(true) est accepté par le navigateur, j'ai essayé en déclarant "var dep=0", et en faisant un while(dep==1), et j'obtient le même résultat qu'avec while(true).

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Jln13 a sûrement raison : pour le nav c'est une boucle sans fin, qui génère au mieux un avertissement ("bla bla peut ralentir votre ordi").

    Si tu essayais plutôt de déclencher un setInterval() dans ta fonction start(), qui serait arrêté par ta fonction stop() ?

    Il suffirait alors de passer tes "x" et "y" en globale, et ton traitement deviendrait plus simple (et moins lourd pour le nav).
    En plus, ça te permet de choisir la fréquence de modif des "x" et "y"

    A+

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 265
    Points : 284
    Points
    284
    Par défaut
    A mon avis le while(true) fait que tu ne pourras jamais mettre dep a false.
    J'ai ecrit un petit script en utilisant setTimeOut pour laisser le temps a la fonction stop() de mettre a false la variable dep et ca marchouille chez moa.

    En esperant que ca t'aide..

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <html>
    	<head>
    		<script type='text/javascript'>
    		<!--
    		var dep=false;
     
    		// La fonction de déplacement de l'objet	
    		function bouge(x,y)
    		{
    			if (dep)
    			{
    				hautimage += y;
    				gaucheimage += x;
    				document.getElementById("smile").style.top  = hautimage;
    				document.getElementById("smile").style.left = gaucheimage;
    				setTimeout("bouge("+x+","+y+")",10);
    			}
    		} 
    		function start(x,y)
    		{
    			dep = true;
    			bouge(x,y);
    		}
     
    		function stop()
    		{
    			dep=false;
    		}
     
    		-->
    		</script>
    	</head>
    	<body>
     
    		<img src="./blabla.jpg" onmouseover="start(-10,0);" onmouseout="stop();">
     
    		<SCRIPT LANGUAGE="javascript">
    		var hautimage = 300;
    		var gaucheimage = 300;
    		document.write('<IMG SRC="./images/smile.gif" ID=smile STYLE="position:absolute;top:'+hautimage+';left:'+gaucheimage+'">');
    		</SCRIPT>
     
    	</body>
    </html>

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut re
    Merci pour ton aidre,

    chez moi ça fonctionne très bien sur firefox, par contre sur IE 6 j'obtiens "erreur sur la page" en bas a gauche quand je passe sur l'image qui déclenche le déplacement.

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 265
    Points : 284
    Points
    284
    Par défaut
    arf dsl j'ai testé qu'avec FF.
    On dirait que IE6 n'aime pas le onmouseover

    Bon ba je reviens vers toi des que j'ai une piste..

  17. #17
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Pour éviter les erreurs "fantôme", tu devrait remplacer ton document.write() par des instructions DOM.

    EDIT : parce que le onmouseover ne pose aucun problème à IE
    (sauf sur les options de select )

    A+

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 265
    Points : 284
    Points
    284
    Par défaut
    Ayé j'ai trouvé
    En fait le nom de la fonction "start" est un nom réservé chez IE. Il suffit de renommer la fonction pour que ca fonctionne sous IE6

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Re
    Merci beaucoup pour ton/vôtre aide, je passe le sujet en résolu.

    Bonne journée

  20. #20
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bien vu jln13

    @crackers-belin > Par contre, le document.write() étant à proscrire, tu devrais quand même faire ça, si tu as le temps
    Citation Envoyé par E.Bzz Voir le message
    Pour éviter les erreurs "fantôme", tu devrait remplacer ton document.write() par des instructions DOM.
    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Quote] DVP quoté sur Bashfr
    Par Skyounet dans le forum La taverne du Club : Humour et divers
    Réponses: 16
    Dernier message: 26/09/2006, 18h52

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