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

jQuery Discussion :

Double évément au survol d'une div


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Double évément au survol d'une div
    Bonjour.

    Il y a quelque chose que je ne m'explique pas avec le code ci-dessous: lorsque mon pointer survole la div#mouse, la div#pop s'affiche. Mais lorsque, mon pointer étant en train de survoler #mouse, il vient à survoler le span à l'intérieur, les deux événements liés à #mouse se répètent: autrement dit #pop disparait et s'affiche à nouveau. Pourtant, je suis toujours en train de survoler #mouse.

    Comment éviter ce problème, tout en conservant #mouse comme élément déclencheur des événements ?

    Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div id="mouse" style="width: 200px; background: yellow; text-align: center; height: 100px;">
    	<span style="background: white;">pointez ici</span>
    </div>
     
    <div id="pop" style="opacity: 0;">POP</div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var mouse = document.getElementById('mouse'),
    	pop = document.getElementById('pop');
     
    mouse.addEventListener('mouseover', function() {
    	$('#pop').animate({opacity:'1'},'slow');
    }, false);
    mouse.addEventListener('mouseout', function() {
    	$('#pop').animate({opacity:'0'},'fast');
    }, false);

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    Comme j'ai l'impression que tu utilises jQuery, tu peux utiliser l'évènement "mouseenter" et "mouseleave"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $('#mouse').mouseenter(function(){
        $('#pop').animate({opacity:'1'},'slow');
    });
    $('#mouse').mouseleave(function(){
        $('#pop').animate({opacity:'0'},'fast');
    });
    démo : http://jsfiddle.net/phNua/

  3. #3
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Par défaut
    Ou alors:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $("#mouse").hover(function() {
        $('#pop').animate({opacity:'1'},'slow');
    }, function() {
        $('#pop').animate({opacity:'0'},'fast');
    });

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour.

    Merci pour cette réponse.

    Il est donc impossible d'utiliser DOM-2 (dans mon exemple: un "écouteur" d'événement) avec jQuery ?

    Cela m'arrangerait de conserver cette gestion d'événement.

    Ou alors, existe-t-il une fonction javascript (en-dehors de tout framework ou librairie type jQuery) qui permette d'animer le changement de valeur de l'attribut CSS opacity ?

    Mais d'ailleurs, est-ce vraiment l'utilisation de jQuery qui pose problème dans mon exemple ?

    Merci.

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut
    .mouseenter, .mouseleave et .hover (qui est un raccourci des 2) sont des events listener : http://api.jquery.com/category/events/mouse-events/

    De ce fait, tu ne perds pas cette gestion.

    Le code fourni fonctionne parfaitement.

    Par contre, si par exemple, tu crées les éléments via Javascript, il te faudra alors utiliser "live()" ou "delegate()"

    Pour l'animation par opacité, tu as les fonctions associées : http://api.jquery.com/category/effects/fading/

    Enfin, si tu souhaites rester avec animate(), je te conseille l'utilisation de dequeue() (qui permet de ne pas avoir une animation répétée x fois parce que l'utilisateur a fait les évènements trop rapidement)
    $('#test').dequeue().animate({opacity:'1'},'slow');

  6. #6
    Invité
    Invité(e)
    Par défaut
    Shikiryu, tu es merveilleux, tu anticipes mes questions ! ^^(pour dequeue)

    Je ne voulais pas dire que le code de Macmillenium ne fonctionne pas. Au contraire, je l'ai testé, il fonctionne parfaitement.

    Quelle serait l'utilité de live et delegate dans mon cas ?

    Merci.

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Par défaut


    Le code de Macmillenium est un raccourci du mien comme tu peux le voir dans la documentation ( http://api.jquery.com/hover/ )

    Live permet la gestion d'évènement sur des éléments non présents dans le DOM au chargement de la page (ou d'éléments supprimés/réinséré/etc) Plus d'infos dans la doc : http://api.jquery.com/live/

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

Discussions similaires

  1. afficher une div au survol d'une autre div
    Par Vanlen dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 07/12/2010, 09h00
  2. Afficher une div au survol de la souris sur une autre div
    Par Stouille89 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/06/2010, 13h54
  3. Modifier les propriétés d'une div au survol d'une autre
    Par umeboshi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/09/2008, 18h02
  4. Position du curseur réinitialisée au survol d'une div (sur IE) :/
    Par Huntress dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/08/2006, 23h07

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