Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2011, 11h08   #1
Membre régulier
 
Avatar de kéraunos
 
Homme
Inscription : janvier 2005
Messages : 157
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2005
Messages : 157
Points : 71
Points : 71
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 :
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 :
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);
kéraunos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 12h21   #2
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Comme j'ai l'impression que tu utilises jQuery, tu peux utiliser l'évènement "mouseenter" et "mouseleave"

Code :
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/
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 14h17   #3
Rédacteur/Modérateur
 
Avatar de Macmillenium
 
Homme
Inscription : mars 2008
Messages : 2 288
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mars 2008
Messages : 2 288
Points : 3 205
Points : 3 205
Ou alors:
Code javascript :
1
2
3
4
5
6
 
$("#mouse").hover(function() {
    $('#pop').animate({opacity:'1'},'slow');
}, function() {
    $('#pop').animate({opacity:'0'},'fast');
});
__________________
Je ne réponds pas aux questions techniques par MP.
Macmillenium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 14h19   #4
Membre régulier
 
Avatar de kéraunos
 
Homme
Inscription : janvier 2005
Messages : 157
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2005
Messages : 157
Points : 71
Points : 71
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.
kéraunos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 14h35   #5
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
.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');
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 15h48   #6
Membre régulier
 
Avatar de kéraunos
 
Homme
Inscription : janvier 2005
Messages : 157
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2005
Messages : 157
Points : 71
Points : 71
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.
kéraunos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 16h01   #7
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662


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/
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h08.


 
 
 
 
Partenaires

Hébergement Web