Ajouter un délai avant .hide () avec jQuery

J’ai un code simple qui garde un élément visible pendant que la souris le survole et le cache une fois la souris éteinte:

$(".item").hover( function () { $(this).show(); }, function () { $(this).hide(); } ); 

Je voudrais append un peu de retard avant qu’il se cache, mais en ajoutant $(this).delay(500).hide(); ne semble pas fonctionner …

 var my_timer; $(".item").hover( function () { clearTimeout(my_timer); $(this).show(); }, function () { var $this = $(this); my_timer = setTimeout(function () { $this.hide(); }, 500); } ); 

Voici une démo: http://jsfiddle.net/e3cNK/1/

Si vous souhaitez pouvoir afficher à nouveau l’élément après qu’il ait été masqué, vous souhaitez modifier l’opacité de l’élément plutôt que de modifier son display . Cela gardera les éléments dans le stream normal de la page afin que lorsque l’utilisateur passe la souris sur l’élément caché, il peut à nouveau afficher:

 var my_timer; $(".item").hover( function () { var $this = $(this); $this.text('Mouse-Over'); clearTimeout(my_timer); $this.stop().fadeTo(250, 1); }, function () { var $this = $(this); $this.text('Mouse-Out'); my_timer = setTimeout(function () { $this.fadeTo(250, 0); }, 500); } ); 

Voici une démo: http://jsfiddle.net/e3cNK/2/

.hide() sans aucun argument n’utilise pas la queue des effets (et n’aura pas à attendre .delay() ). Au lieu de cela, vous pouvez utiliser $(this).delay(500).hide(0);