[resolu][JQuery] show, hide et empilement d'events

show, hide et empilement d'events [resolu][JQuery] - Javascript/Node.js - Programmation

Marsh Posté le 15-12-2014 à 12:07:16    

Bonjour,
J'ai mis sur une page un div1 qui s'affiche lors d'un survol d'un div2, pas trop compliqué :

Code :
  1. $("#permalinkListener" ).mouseenter(function() {
  2.    $("#permalink" ).show( "slow" );
  3.   }).mouseleave(function() {
  4.    $("#permalink" ).delay( 3000 ).hide( "slow" );
  5.   });


 
Mais le problème, c'est que si pendant les 3000ms de pause on fait pleins de survols du div 2, alors JQuery empile (à juste titre) les demandes, et les joue les unes après les autres...
alors j'ai tenté d'ajouter clearQueue(), mais sans effet,
 
Alors j'ai voulu faire ça :
 

Code :
  1. $("#permalinkListener" ).mouseenter(handlerMouseEnterPermalien).mouseleave(handlerMouseleavePermalien);
  2. var handlerMouseEnterPermalien = function() {
  3.  $("#permalinkListener" ).unbind("mouseenter", handlerMouseEnterPermalien);
  4.  $("#permalink" ).show( "slow" );
  5. }
  6. var handlerMouseleavePermalien = function() {
  7.  $("#permalinkListener" ).unbind("mouseleave", handlerMouseleavePermalien);
  8.  $("#permalink" ).delay( 3000 ).hide( "slow" );
  9.  $("#permalinkListener" ).delay( 3000 ).bind("mouseenter", handlerMouseEnterPermalien);
  10.  $("#permalinkListener" ).delay( 3000 ).bind("mouseleave", handlerMouseleavePermalien);
  11. }


 
Mais ça ne coupe pas l'écoute pendant les 3000 milisecondes...
 
Existe il un moyen ?
 
Je vous remercie de votre retour


Message édité par naeco le 15-12-2014 à 14:29:39
Reply

Marsh Posté le 15-12-2014 à 12:07:16   

Reply

Marsh Posté le 15-12-2014 à 14:07:12    

La solution (que je ne trouve pas belle) :  

Code :
  1. var hov = 1;
  2. $("#permalinkListener" ).mouseenter(function(){
  3.     clearTimeout();
  4.     hov = 1;
  5. $("#permalink" ).show( "slow" );
  6. });
  7. $("#permalinkListener" ).mouseleave(function(){
  8.         hov = 0;
  9.         setTimeout(function(){
  10.                 if(hov == 0){
  11.                     $("#permalink" ).hide( "slow" );
  12.                 }
  13.         }, 3000);
  14. });


 
Alors que contre toute atteinte, ça ne marche pas :

Code :
  1. var isHover = 1;
  2.   $("#permalinkListener" ).mouseenter(function() {
  3.    isHover = 1;
  4.    $("#adressePermalien" ).select();
  5.    $("#permalink" ).show( "slow" );
  6.   }).mouseleave(function() {
  7.    isHover = 0;
  8.    if(isHover == 0){
  9.     $("#permalink" ).delay( 3000 ).hide( "slow" );
  10.    }
  11.   });


 
je suis toujours intéressé par d'autres solutions, et sur pourquoi la version full jquery juste au dessus ne fonctionne pas :o

Reply

Marsh Posté le 15-12-2014 à 14:18:25    

Et pour info, forcer le show et le hide avec :

Code :
  1. $("#permalink" ).delay( 3000 ).hide( "slow", "swing", false);


 
ne change rien :o
 
mais ça semble expliquer :
 
http://stackoverflow.com/questions [...] g-together
 
Ca serait dû à delay()


Message édité par naeco le 15-12-2014 à 14:27:01
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed