J’essaie d’append un simple effet de fondu enchaîné aux boutons avec jQuery mais je suis un peu coincé avec le fondu enchaîné. J’utilise ce code:
$('#header #menu li a').hover(function () { $(this).fadeOut(0).addClass('hover').fadeIn(300); }, function () { $(this).fadeOut(0).removeClass('hover').fadeIn(0); });
Il ajoute une classe de survol qui définit un arrière-plan CSS et un fondu de l’image de survol. Cependant, lorsque je déplace un curseur hors du bouton, il disparaît simplement comme d’habitude, aucun fondu de fondu.
Pouvez-vous m’aider avec ceci s’il vous plaît?
Merci beaucoup pour toutes les réponses
Ces deux fonctions sont opposées l’une de l’autre, donc ça devrait marcher … ( code mis à jour )
$('#header #menu li a').hover(function () { $(this).fadeOut(0).addClass('hover').fadeIn(300); }, function () { $(this).fadeOut(300) .queue(function(){ $(this).removeClass('hover').fadeIn(0).dequeue() }); });
C’est assez moche … Voir en action sur http://jsfiddle.net/zS6ex/ .
Cependant, vous avez toujours un problème: vous effacez l’ intégralité du lien , pas seulement l’image. Autant que je sache, vous ne pouvez pas définir l’opacité de l’image d’arrière-plan séparément (il est déjà difficile de définir une opacité complète si vous le faites manuellement …)
Comme il a été répondu maintes fois ici sur SO, vous devez utiliser les callbacks
des fx methods
jQuery pour effectuer quoi que ce soit après la fin d’ une animation.
$('#menu li a').hover(function(){ $(this).fadeOut('fast', function(){ $(this).addClass('hover').fadeIn(300); }); }, function(){ });
Quoi qu’il en soit, appeler .fadeOut(0)
cet élément sans aucune animation, juste comme instantané. Le premier paramètre est la durée.
Pourquoi ne pas simplement le cacher en ajoutant la classe car fadeOut (0) n’a pas d’animation
$('#header #menu li a').hover(function () { $(this).hide().addClass('hover').fadeIn(300); }, function () { $(this).hide().removeClass('hover').show(); // as there is no fading time the line above will be equal to $(this).removeClass('hover'); });
lorsque vous avez besoin de faire quelque chose après une animation, vous devez utiliser le rappel $(...).fadeIn(400,function(){ alert('this is the callback'); }
, si vous n’utilisez pas le rappel, le code est couru pendant que l’animation se passe.
et je ne sais pas si c’est utile mais il y a une pseudo classe :hover
en css, voir ici
La pseudo-classe: hover est prise en charge par tous les principaux navigateurs.
Donc, avec cela, vous pouvez faire différentes choses comme:
#header #menu li a:hover { ...set style of 'a' when over 'a' } #header #menu li:hover a { ...set style of 'a' when over 'li' }
il suffit de jouer avec un peu et vous pouvez faire beaucoup avec juste css