2010-07-01 4 views
0

Disons que j'ai deux éléments: une ancre qui provoque une occurrence d'un div particulier. Dans ce seul cas, je ne suis pas en mesure d'envelopper ces deux dans un conteneur parent, donc le balisage entier doit être comme suit:jQuery mouse out et ne pas masquer un élément particulier

<a href="#" class="trigger">click me</a> 
<div class="info">info displayed on trigger hover</a> 

La question fondamentale est: lorsque la laisse la souris sur la gâchette I voulez cacher la fenêtre d'information mais seulement si le curseur n'est pas dessus. Comment puis-je faire cela?

Aide apprécié, concernant

+0

Lorsque vous dites que vous ne pouvez pas les envelopper, voulez-vous dire côté serveur ou côté client? est de les emballer via jquery une option? –

Répondre

1

Si vous ne pouvez pas modifier le balisage du tout, vous pouvez lui donner un bel effet de fondu, et tirer profit du fait un fondu n'est pas instantané, quelque chose comme cela gérer tous les .trigger/.info paire:

$(".trigger, .info").hover(function() { 
    $(this).next().andSelf().filter(".info").stop().animate({opacity: 1 }); 
}, function() { 
    $(this).next().andSelf().filter(".info").stop().animate({opacity: 0 }); 
});​​​​​​ 

You can try a demo here, vous pourriez briser cette info une fonction pour .trigger et un pour .info, je juste garder un peu plus laconique. Les deux version fonction regarderait like this:

$(".trigger, .info").hover(function() { 
    $(this).next().stop().animate({opacity: 1 }); 
}, function() { 
    $(this).next().stop().animate({opacity: 0 }); 
}); 
$(".info").hover(function() { 
    $(this).stop().animate({opacity: 1 }); 
}, function() { 
    $(this).stop().animate({opacity: 0 }); 
}); 

Ce que cela fait est en mouseenter il apparaît en fondu, sur mouseleave il disparaît (via .animate()) ... mais en déplaçant la souris de l'un à l'autre laissera le fondu se produire pour 1 trame avant de mettre un .stop() au fondu de sortie et de l'éteindre en retour. Pour l'utilisateur, ils ne voient pas que quelque chose s'est passé, lorsque la souris quitte les deux, le fondu est autorisé à continuer.

0
$('.trigger').live('mouseout',function (event) { 
    if (!$(event.relatedTarget).is('.info')) 
     $(this).next().hide(); 
}); 
+0

C'est génial sauf le fait que le déclencheur est un objet marqueur Google Maps API et donc je ne suis pas capable d'interagir avec la méthode jQuery (par exemple, attacher un évènement) - je ne sais même pas s'il est possible de convertir le marqueur en quelque sorte ou utiliser le modèle GEevent? – ienes

Questions connexes