2010-03-30 5 views
0

J'expérimente des menus déroulants (à l'intérieur de DIVs flottants). Les faire apparaître avec onmouseover attributs n'est pas un problème, mais je ne suis pas sûr de savoir comment je peux fermer le menu correctement.Comment savoir quand un menu déroulant doit être fermé

Je traite une image dont les liens sont mappés avec <map>. Je veux que les gens voient un menu en survolant un lien. J'ai pensé que la meilleure façon de savoir quand fermer le menu est d'attendre que la souris ne survole plus l'élément HTML qui a appelé le menu ou le menu lui-même, puis attendez une seconde, puis fermez le menu.

Est-ce que mon idée est quelque chose qui peut être implémenté, peut-être avec un peu de jQuery? Ou existe-t-il une alternative meilleure et plus efficace?

Répondre

3

Je vais lancer ma recommandation derrière le plugin jQuery hoverIntent. Devrait être opérationnel rapidement, très configurable, et pas besoin de rouler votre propre code.

+0

Cela semble prometteur, mais pour que cela fonctionne, je ne peux pas utiliser un autre élément HTML (j'utilise un DIV), n'est-ce pas? – Pieter

+0

Non, vous devriez pouvoir utiliser ce que vous voulez. – ajm

+0

Mais alors, comment sait-il quand appeler le code "close menu" si le menu actuel ne fait pas partie de l'élément qui a appelé le code "open menu"? – Pieter

0

avec jquery:

$("your-menu-button-selector, your-menu-selector").bind("mouseleave", function(e){ 
    clearTimeout($(this).data("mouseleaveTimeout")); 
    $(this).data("mouseleaveTimeout", setTimeout(function(){ 
    //your code 
    //closeMenu(); 
    }, 1000)); //one second 
}); 

vous souhaitez également effacer le délai d'attente lors de l'ouverture du menu!

$("your-menu-button-selector, your-menu-selector").bind("mouseenter", function(e){ 
    clearTimeout($(this).data("mouseleaveTimeout")); 
    //your code 
    //openMenu() 
}); 

Je comprends maintenant, vous pouvez avoir appliquer la même chose aussi le lien et la boîte de menu de sorte que lors du survol des options, il ne disparaît pas.

+0

J'ai un problème avec cela. Si je passe la souris sur le menu pendant trop longtemps (c'est-à-dire pendant plus d'une seconde) sans rien cliquer, il se ferme. – Pieter

+0

@Pieter Ensuite, vous supprimez le délai d'attente d'une seconde – ant

+0

@Pieter, vous voulez dire que c'est ce que vous voulez, pour l'avoir également fermé en planant plus de, disons, 10 secondes? Je vais éditer ma réponse pour cela. – Victor