est en dessous du HTML & Code JQuery je:JQuery Animer retard Problèmes
HTML Je:
<div class="announcement">
<img id="imgBanner" style="cursor: pointer;" onmouseover="showPopup();" />
</div>
<div id="divArrow" class="arrow">
<img id="imgExpandContract" style="cursor: pointer;" alt="Arrow" border="0"onmouseover="showPopup();" />
</div>
<div id="window">
<!-- some html content acting as a fly-out -->
</div>
code JS:
var imgBanner = "xyx.png";
var imgArrowExpand = "xyx.png";
var imgArrowContract = "xyx.png";
var isDone = false;
function showPopup() {
try {
var imgWidth = $("#imgExpandContract").width();
var posX = document.getElementById("imgExpandContract").offsetLeft + imgWidth;
if (!$("#window").is(":animated")) {
$("#window").animate({ left: posX }, 800, 'easeOutSine',
function() {
isDone = true;
$("#imgExpandContract").attr("src", imgArrowContract);
$("#window").bind("mouseenter", function() { $("#window").bind("mouseleave", function() { closePopup(); }); });
}
);
}
}
catch (error) {
//disable the banner, arrow images
document.getElementById("imgBanner").style.visibility = 'hidden';
document.getElementById("imgExpandContract").style.visibility = 'hidden';
}
}
function closePopup() {
try {
if (isDone) {
var posY = $("#window").width();
$("#window").animate({ left: -posY }, 600, 'linear',
function() {
isDone = false;
$("#imgExpandContract").attr("src", imgArrowExpand);
$("#window").unbind("mouseenter");
$("#window").unbind("mouseleave");
}
);
}
}
catch (error) {
//disable the banner, arrow images
document.getElementById("imgBanner").style.visibility = 'hidden';
document.getElementById("imgExpandContract").style.visibility = 'hidden';
}
}
J'ai actuellement 2 problèmes:
Quand je souris sur la div #window, il y a un petit délai avant lequel le mouseleave est appelé. Comment puis-je faire disparaître cela? Il reste un peu pendant quelques millisecondes avant de crier mouseleave. L'événement mouseleave ne se déclenche parfois pas ... Ça arrive parfois, mais ça arrive. Je dois déplacer ma souris sur la div #window et reculer (dois le faire deux fois essentiellement)? Quelqu'un peut-il me dire pourquoi cela arrive et comment je peux gérer?
Existe-t-il de meilleures solutions pour ce faire autre que l'utilisation de animate() dans JQuery? Serait heureux à tous/toutes les suggestions. J'essaie de faire un effet fly-out/slideIn avec du contenu dans un div.
Merci beaucoup pour votre aide
+1 pour $ (élément) .stop (true); J'ai résolu mon problème, même si mon problème était différent :) – Dimskiy