Bonjour,

J'ai 6 div de classe .groupe dans ma page. Chacune est composée de 3 autres div à l'intérieur, .capture, .titre et .expend. Le code donne ceci :

<div class="groupe">

<div class="capture"></div>

<div class="titre"> </div>

<div class="expend"></div>

</div>

La div .capture est une image qui prend les 3/4 la hauteur et .titre est un texte avec une image d'arrière-plan.

Au début de mon script, je cache tous les div .expend visibles avec cette ligne :

$(".groupe .expend:visible").hide()

Je souhaite afficher chaque div .expend lors du survol de la div .groupe parent et la masquer à nouveau lors de le sortie du survol de la div .groupe. J'ai donc écris ceci :

$(".groupe").mouseover(function(){

$(this).find('.expend').fadeIn();

});

$(".groupe").mouseout(function(){

$(this).find(".expend").hide();

});

Le mouseover fonction très bien, c'est au niveau du mouseout dont j'ai un souci. Voici ce qui se passe. Je survol la div .groupe par le haut, par la div .capture (qui prend la quasi hauteur de la div .groupe) et le mouseover se déclenche. Lorsque je descends la souris pour me rendre vers la div .expend qui vient de s'afficher, je survol la div .titre. En passant de la div .capture à la div .titre, le script considère que je viens de quitter la div .groupe et déclenche le mouseout, bien que je sois toujours dans la div .groupe puisque .capture et .titre sont des enfants de .groupe.

Comment faire ? Comment puis-je écrire mon script pour qu'il prenne le mouseout au bon moment et non lorsque je me déplace à l'intérieur de la div .groupe ?

6 réponses


T'a essayé de mettre le mouseout sur .titre ou .expend au lieu de .groupe ?

koudji
Auteur

Oui c'est ce que j'ai fais au début mais ça ne m'intéresse pas. Je souhaite que le mouseouver se déclenche sur toute la div .groupe et non sur l'une de ses div enfants.

koudji
Auteur

Je viens de placer l'exemple sur une page test de mon site à cette adresse : http://www.jmndesign.be/test/test.jmn.html

Bonjour,

Plutôt que de cacher chaque ".expend" en JS, pourquoi ne pas utiliser sur cette classe la propriété "display: none;" ? Peut-être que ça réglera le soucis s'il s'agit d'un conflit.

koudji
Auteur

Tout simplement parce que je souhaite la cacher et l'afficher en animation lors du survol, comme indiqué dans mon texte.
J'ai finalement trouvé une solution en cherchant sur d'autres forums. Il s'agit d'un bug dans Jquery. Je vous invite à regarder cette vidéo concernant jQuery Events: MouseOver/MouseOut vs. MouseEnter/MouseLeave à cette adresse :
http://www.bennadel.com/blog/1805-jQuery-Events-MouseOver-MouseOut-vs-MouseEnter-MouseLeave.htm

Ok mais la première ligne du JS fait en sorte de cacher tous les ".expend". Mettre un "display: none;" en CSS équivaut à cacher tous les éléments ".expend". De cette façon, ça n'intervient pas dans l'animation pour afficher/masquer les objets ayant cette classe.