Jquery .mouseenter() Est_il temporisable?

deutch36 Messages postés 73 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 11 décembre 2012 - 13 sept. 2012 à 18:13
deutch36 Messages postés 73 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 11 décembre 2012 - 20 sept. 2012 à 15:44
Bonjour,

Je me heurte depuis quelques jours à un problème de JQuery.
Je dois en effet réaliser un accordéon avec des tables.

Accordéons qui fonctionne très bien avec l'évènement .click().

Cependant mon patron a décider d'opter pour une solution plus dynamique. A chaque passage de souris l'accordéon doit agir. J'avais commencer avec le mouseover(); Mais trop sensible donc l'accordéon m'affichait toutes les lignes.

Je choisis par la suite le mouseenter() beaucoup moins sensible, cependant il m'affiche encore beaucoup trop de ligne.

J'ai tenté de le temporiser et de compter le nombre d'evènement pour afficher juste la ligne que je souhaite mais rien n'y fais il m'affiche toujours plusieurs ligne.

L'accordeon est comme suit :

textes1,
....,
----

,

----
...


Et le Jquery :

$("#a").mouseenter(function(){	

    id = $(this).attr('id');
    $(".graph").hide();

    $("#" + id).next(".graph").fadeIn(500);	
});


Je vous remercie par avance de votre aide.

2 réponses

kingcobra Messages postés 316 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 19 septembre 2012
19 sept. 2012 à 14:14
Salut,

A tout hasard, as tu regardé jquery accordion ? Qui est fait pour ça et il y'a peut-etre les options que tu souhaites dedans :
http://docs.jquery.com/UI/Accordion

Sinon, mouseenter n'est pas temporisable à ce que je sache, mais tu peux le rendre assez facilement :

$("#a").mouseenter(function(){
   //récupère l'objet concerné
   var $t = $(this);
   //ajoute une donnée pour l'annulation si tu souhaites annuler un effet
   //pendant la temporisation
   $t.data("cancel",false);
   //temporise de 200ms l'appel à la fonction
   setTimeout(function(){
      //si pas d'annulation sur cet objet
      if ($t.data("cancel") == false){
         $(".graph").hide();
         $t.next(".graph").fadeIn(500);
      }
   },200);
});

//si pour une raison quelconque tu souhaites annuler le mouvement, 
//il te suffit de mettre le data de l'objet concerné à true et l'évènement
//ne sera pas executé aprés le delay ( obj.data('cancel',true); )


Ce code a pour but de temporiser l'appel, c'est à dire que l’exécution se fera 200ms après le mouseenter, si rien ne l'a annulé.

KiNgCoBrA
http://www.web-look.fr
0
deutch36 Messages postés 73 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 11 décembre 2012 3
20 sept. 2012 à 15:44
Bonjour,

Merci de votre réponse.

La raison pour laquelle je n'ai pas utilisé jquery accordion est dut au fait que dans l'entreprise nous préférons réaliser nos propres modules/plugin de sorte a ce qu'il corresponde le mieux a nos besoins.

Mon patron ayant décider de revenir sur l'évènement clique, je n'étais pas venus jeter un coup d'oeil.

Je vous remercie et testerai ça dès que j'aurais un petit peu de temps.

Bien cordialement,

Deutch36
0
Rejoignez-nous