J'ai une sélection d'icônes qui, lorsque je les survole, déclenche une animation qui consiste à animer la position gauche et supérieure d'une image différente. Ensuite, lorsque je souris de l'icône, l'image retourne à son état d'origine. Le problème est que si je déplace frénétiquement le curseur sur toutes les icônes très rapidement, les positions gauche et supérieure des images animées ne reviennent pas à leur état initial comme prévu.jquery anime produire des résultats impairs
Voici le code - des idées comment je peux ranger cela et prévenir cela et d'autres problèmes?
$("div").hover(function() {
$(this).find("span").slideDown(100);
$(this).css("background-color","#89A7BA");
var currentlyHovered = $(this).find("img").attr("id").replace("-icon", "");
$("img#" + currentlyHovered + "-spot").animate({
width: "17px",
height: "17px",
left: parseInt($("img#" + currentlyHovered + "-spot").css("left")) - 5,
top: parseInt($("img#" + currentlyHovered + "-spot").css("top")) - 5
}, 100);
}, function() {
$(this).find("span").slideUp(100);
$(this).css("background-color","#000");
$("img#" + currentlyHovered + "-spot").animate({
width: "7px",
height: "7px",
left: parseInt($("img#" + currentlyHovered + "-spot").css("left")) + 5,
top: parseInt($("img#" + currentlyHovered + "-spot").css("top")) + 5
}, 100);
currentlyHovered = "";
});
Pour ceux qui sont intéressés, voici la solution complète.
$.fn.hoverAnimation = function() {
return this.each(function() {
var currentlyHovered = $(this).find("img").attr("id").replace("-icon", "");
var originalLeft = parseInt($("img#" + currentlyHovered + "-spot").css("left"));
var originalTop = parseInt($("img#" + currentlyHovered + "-spot").css("top"));
return $(this).hover(function() {
$(this).find("span").slideDown(100);
$(this).css("background-color","#89A7BA");
$("img#" + currentlyHovered + "-spot").animate({
width: "17px",
height: "17px",
left: originalLeft - 5,
top: originalTop - 5
}, 100);
},function() {
$(this).find("span").slideUp(100);
$(this).css("background-color","#000");
$("img#" + currentlyHovered + "-spot").animate({
width: "7px",
height: "7px",
left: originalLeft,
top: originalTop
}, 100);
});
});
}
$("div").hoverAnimation();
Je suis heureux que ma solution a fonctionné pour vous. Je suis un grand fan de la construction de plugins ad hoc jQuery pour des tâches simples mais répétables. –