2010-05-20 10 views
0

J'ai trouvé quelqu'un avec un tutoriel montrant ce que je suis essentiellement après, mais la démo est pour un sous-menu qui glisse vers le bas au lieu d'avoir le sous-menu glisser au-dessus de l'élément de menu.Essayer de créer un menu JQuery avec un sous-menu qui glisse vers le haut et glisse vers le bas lorsque la souris quitte

Voici le lien vers le tutoriel:

http://www.darkscarab.com/blog/read.php?id=14

Voici le script jQuery utilise:

$(document).ready(function(){ 
    $(".submenu").slideUp(100, function(){$(".menu_item").css({overflow:'visible'})}); 
    $(".menu_item").hover(
     function(){ 
      if($(".submenu", this).queue().length < 2) 
       $(".submenu", this).slideDown(500); 
     },function(){ 
      $(".submenu", this).slideUp(500); 
     } 
    ); 
}); 

Lorsque je passe le slideUp pour slideDown et vice-versa, la chose fonctionne assez bien en glissant (fonctionne même quand je ne les éteins pas!) - mais le glissement vers le bas qui est censé se produire quand je sors ne fonctionne pas vraiment. C'est comme si le sous-menu disparaissait et finissait sa trajectoire descendante la prochaine fois que je le survolerais.

Fondamentalement, tout est hiccup-y et très peu fiable.

Quelqu'un at-il des idées brillantes pour ce novice?

Merci beaucoup!

Répondre

1

.slideDown affiche un élément commençant à height:0, puis anime la propriété height à sa valeur complète. .slideUp anime la hauteur de sa valeur complète à 0 puis masque l'élément. Afin de créer l'animation que vous voulez, vous ne pouvez pas les changer parce que vous voulez que slideUp s'affiche au lieu de cacher et vice-versa.

Si je devais construire ce que je décris, je placerais de manière aboliente un élément dans un élément relativement positionné à bottom:0 de sorte que lorsque j'animerais la propriété height, il croîtrait à partir du bas. Ensuite, je créerais function mySlideUp() tel qu'il .show() est l'élément interne qui est initialement display:none; height:0 puis .animate({height:'auto'},'slow'). Pour function mySlideDown() je voudrais .animate({height:0},'slow') puis hide().

J'espère que cela aide. L'a écrit en pseudo-jQuery puisque vous êtes un novice et il serait bénéfique pour vous de l'écrire vous-même. Bonne chance!

+0

Merci pour la merveilleuse explication, mhr. Je peux vraiment le comprendre :) Je vais travailler dessus, en utilisant les informations très utiles que vous m'avez fournies, et je posterai le code pour les autres débutants si/quand je l'ai compris. J'apprécie sincèrement votre aide! – heathwaller

+0

Vous êtes les bienvenus, mais vraiment, si cela fonctionne, une réponse positive et acceptée est tous les remerciements dont j'ai besoin. ;) – mVChr

+0

Merci de m'avoir éclairé.Je vais vous donner un crédit pour votre aide :) Ceci est le code que j'ai trouvé (a eu des problèmes avec certaines des parties de hauteur suggérées dans votre code ci-dessus): $ (function() { $ ('#menuli'). vol stationnaire (function() {\t \t \t \t \t if (! $ (this) .Find ('a') parent(). hasClass ('actif').) { $ (this). .. find ('ul') css ({visibilité: "visible", affichage: "none"})! spectacle (500); \t} \t \t \t}, function() { \t \t if ($ (this) .find ('a'). parent(). hasClass ('actif')) { \t \t \t $ (this) .find ('ul: first'). Hide (500); \t \t \t} \t \t}); }); Maintenant, j'ai un peu d'accumulation de file d'attente d'animation - et .stop() ne le résout pas. – heathwaller

0

Pour ceux qui cherchent un menu de navigation comme celui que je cherchais à atteindre, le site suivant peut être utile:

http://www.mrbandfriends.co.uk/

Mais en utilisant les conseils de mh, et en regardant à travers la façon dont M. B codé leur navigation, j'ai finalement réussi à obtenir une navigation scrollable avec de la chapelure.

Merci!

+0

Je suis content que vous ayez réussi. Cela aurait été plus rapide si je l'avais juste écrit et testé pour vous-même, mais je suis sûr que le temps que vous avez passé sera compensé dans le futur par ce que vous avez appris à implémenter vous-même. À votre santé! – mVChr