J'ai mis ce code ensemble à partir d'un extrait d'un autre endroit, donc je ne fais peut-être pas très bien ça. J'ai plusieurs années div qui ressemble à ceci:jquery bascule les éléments hover avec le délai de masquage
<div class="services">
<p>...</p>
<ol class="serviceList" style="display: none;">
<li>
<p>service</p>
<ul>
<li>service description</li>
</ul>
</li>
...
</ol>
</div>
Je veux que <ol>
-slideDown
lorsque les services div
est survolaient. Il a besoin d'un délai pour qu'il ne disparaisse pas si l'utilisateur se trompe de souris. Mais si elles la souris sur un autre service div
puis le visible dont on a besoin pour aller immédiatement pour faire place à la nouvelle serviceList
Voici ce que je maintenant:
$('.services').each(function() {
var time = 800;
var hideDelay = 1000;
var hideDelayTimer = null;
var beingShown = false;
var shown = false;
var trigger = $(this);
var info = $('.serviceList', this);
$([trigger.get(0),info.get(0)]).mouseover(function() {
if (hideDelayTimer) clearTimeout(hideDelayTimer);
if (beingShown || shown) {
// don't trigger the animation again
return;
} else {
info.addClass('active');
// reset position of info box
beingShown = true;
info.css('zindex','2')
.slideDown(time, function() {
beingShown = false;
shown = true;
});
}
return false;
}).mouseout(function() {
if (hideDelayTimer) clearTimeout(hideDelayTimer);
hideDelayTimer = setTimeout(function() {
hideDelayTimer = null;
info.css('zindex','0')
.fadeOut(hideDelay, function() {
shown = false;
info.removeClass('active');
});
}, hideDelay);
return false;
});
});
J'ai une mauvaise compréhension de la portée, donc je ne suis pas sachez à quoi sert le truc get (0). J'ai essayé d'avoir un événement sur mouseover qui vérifie si n'importe quel autre "serviceList" est .active
, puis cachez-le. Cela fonctionne, sauf si vous basculez entre "services" trop vite. Suis même proche de faire ça bien?
Merci
Note: J'ai changé la méthode de traversée car la liste est un enfant de la DIV qui n'est pas un frère. – tvanfosson
+1, hoverintent est la meilleure façon de le faire – karim79
Cela a très bien fonctionné. Merci – dhornbein