Jquery .mouseenter() Est_il temporisable?

Messages postés
74
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
11 décembre 2012
- - Dernière réponse : deutch36
Messages postés
74
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.
Afficher la suite 

2 réponses

Messages postés
316
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
19 septembre 2012
0
Merci
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
Commenter la réponse de kingcobra
Messages postés
74
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
11 décembre 2012
1
0
Merci
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
Commenter la réponse de deutch36