2010-02-15 3 views
1

La question a été postée plusieurs fois et est comment retarder une addClass.jquery addClass - wait, delay, speed, timeout ou autre

J'ai obtenu ceci:

$("#menu ul li").hover(function(){ 
    $(this).addClass("hover"); 
},function(){ 
    $(this).removeClass("hover"); 
}) 

et que vous voulez quelque chose de similaire, mais où la classe est ajouté après 500msek environ. La meilleure réponse jusqu'à présent est celle-ci en utilisant settimeout. Peut-être que j'ai juste besoin d'un exemple de travail: How to wait 5 seconds with jQuery?

Le hooverIntent ne fonctionnera pas car il doit être un addClass.

Br. Anders

MISE À JOUR: Quatre bonnes réponses! Merci. Je ne sais pas pourquoi je ne pensais pas que le hoverIntent fonctionnerait, il peut être utilisé comme vu dans les réponses. En fait, toutes les réponses peuvent être utilisées avec les avantages et les inconvénients. Je vais aller avec le hoverIntent même si un autre plugin doit être inclus. Le pro pour le hoverIntent est qu'une sensibilité peut être définie de sorte que non seulement un délai pour l'addClass peut être défini mais il commence à compter quand la souris est encore positionnée sur la zone (ou pas si la sensibilité est affectée)

+0

Pourquoi hoverIntent ne fonctionnerait-il pas? On dirait qu'il veut juste que vous voulez faire – PetersenDidIt

+0

Il y a des réponses formidables en réponse à votre message précédent. Y compris des exemples sur la façon d'accomplir cela avec jQuery. Jetez un coup d'œil au poste de Doug Neiner à nouveau. –

+0

Le message a été trouvé lors de la recherche et j'ai vraiment essayé d'incorporer setTimeout comme dans l'exemple. J'ai d'abord fait ce post après abandonné. Je ne suis pas un «requin» quand il s'agit de javascript. Il s'améliore cependant, peu à peu ... – Tillebeck

Répondre

2

Je ne vois pas pourquoi hoverIntent ne fonctionnera pas:

$("#menu ul li").hoverIntent({  
    sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)  
    interval: 200, // number = milliseconds for onMouseOver polling interval  
    timeout: 500, // number = milliseconds delay before onMouseOut  
    over:function(){ 
     $(this).addClass("hover"); 
    }, 
    out: function(){ 
     $(this).removeClass("hover"); 
    } 
}); 
+0

Vous avez raison. HoverIntent fonctionnera. Je l'utilise maintenant. La combinaison og sensibilité et intervalle est parfaite et rend plus probable que l'on ne fasse l'addClass que si on le souhaite vraiment. – Tillebeck

4
$("#menu ul li").hover(function(){ 
    var $this = $(this); 
    var ovt = setTimeout(function(){$this.addClass('hover'); clearTimeout(ovt);}, 500); 
},function(){ 
    var $this = $(this); 
    var out = setTimeout(function(){$this.removeClass('hover'); clearTimeout(out);}, 500); 
}); 

Est-ce ce que vous cherchez?

+1

oui, exactement. Et ça marchera aussi. Va avec le hoverIntent puisqu'il y a un bonus de sensibilité pour les mouvements de la souris. Mais merci pour votre réponse correcte. – Tillebeck

+0

Je suis totalement d'accord avec votre choix pour HoverIntent .. c'est beaucoup plus polyvalent. – prodigitalson

1

Quelque chose comme ça

$(function(){ 
    $("#menu ul li").hover(function(){ 
     var elem = $(this); 
     setTimeout (function(){ 
      elem.addClass("hover"); 
     }, 1000) ; 
     },function(){ 
     var elem = $(this); 
     setTimeout (function(){ 
      elem.removeClass("hover"); 
     }, 1000) ; 
    }) 
}); 
1

Laissant setTimeout et hoverintent côté (bien qu'ils sont les moyens les plus évidents pour aller), ne pourrions-nous pas utiliser un rappel d'animation null pour cela?

$("#menu ul li").hover(function(){ 
    $(this).animate("",500,"",function(){$(this).addClass("hover")}; 
},function(){ 
    $(this).animate("",500,"",function(){$(this).removeClass("hover"); 
}) 
+0

Une manière intéressante de résoudre le problème. Je ne l'ai pas testé, mais devinez que cela devrait fonctionner. Je vais l'enregistrer en tant qu'extrait de code pour résoudre ce problème une autre fois. J'ai lu qu'il y aura une fonction de délai dans jQuery 1.4 qui devrait être capable de remplacer votre fonction animée – Tillebeck