2013-07-23 3 views
1

J'ai besoin d'aide. J'ai regardé partout mais je pense que ce que je cherche est un peu unique.menu jquery horizontal avec sous-sections

J'essaie de faire un menu qui lorsque vous cliquez sur une option de menu un groupe d'options. Ce morceau que j'ai, je pense. Ce que j'essaie d'accomplir maintenant, c'est de permettre aux enfants du sous-menu de glisser directement entre les lignes de liens. un peu comme un menu accordéon horizontal, avec l'avantage d'avoir tous les liens du menu supérieur dans une rangée plutôt que verticalement.

l'action, cliquez sur l'élément de menu supérieur et un lien sous-menu (s) apparaîtra. Si un lien de sous-menu est cliqué, ce lien affichera les éléments de sous-sous-menu correspondant à ce lien original et cachera tout sauf lui-même et ses parents.

Je ne suis pas un père si je l'explique correctement. ma tête est un petit cerveau mort d'essayer de résoudre ce problème toute la journée et im sur le point de s'effondrer

ceci est un exemple de ce que im essayant d'atteindre.

enter image description here

si vous voulez aller ici pour voir ce que je l'ai fait http://jsfiddle.net/pi_mai/zuU5M/ donc je suis en train de faire un menu avec ce code HTML (je l'ai supprimer de nombreux éléments de lien pour raccourcir le code):

<nav> 
    <ul class="topmenu"> 
     <li class="topmenu-item-1"><a href="" class="topmenu-link">top menu</a></li> 
     <li class="topmenu-item-2"><a href="" class="topmenu-link">top menu</a></li> 
    </ul> 
    <ul class="submenu topmenu-item-1"> 
     <li class="submenu-item-1"><a href="" class="topmenu-link">top menu</a></li> 
     <li class="submenu-item-2"><a href="" class="topmenu-link">top menu</a></li> 
    </ul> 
    <ul class="subsubmenu submenu-item-1"> 
     <li class="submenu-item-1"><a href="" class="topmenu-link">top menu</a></li> 
     <li class="submenu-item-2"><a href="" class="topmenu-link">top menu</a></li> 
    </ul> 
    <ul class="submenu topmenu-item-1"> 
     <li class="submenu-item-7"><a href="" class="topmenu-link">top menu</a></li> 
     <li class="submenu-item-8"><a href="" class="topmenu-link">top menu</a></li> 
    </ul> 
    <ul class="submenu topmenu-item-2"> 
     <li class="submenu-item-1"><a href="" class="topmenu-link">top menu</a></li> 
     <li class="submenu-item-2"><a href="" class="topmenu-link">top menu</a></li> 
    </ul> 
    <ul class="submenu topmenu-item-3"> 
     <li class="submenu-item-1"><a href="" class="topmenu-link">top menu</a></li> 
     <li class="submenu-item-2"><a href="" class="topmenu-link">top menu</a></li> 
    </ul> 
    </nav> 

.

$('.topmenu > li').on('click',function(){ 
     var itemClass = $(this).attr('class'); 
     console.log(itemClass) 
     $('.submenu').not(this).removeClass('toggle'); 
     $('.submenu.' + itemClass).toggleClass('toggle'); 
     $('.subsubmenu.toggle').siblings().removeClass('toggle') 
    }); 
    $('.submenu > li').on('click',function(){ 
     var itemClass = $(this).attr('class'); 
     console.log(itemClass) 
     $('.subsubmenu').not(this).removeClass('toggle'); 
     $('.subsubmenu.' + itemClass).toggleClass('toggle'); 
    }); 

Quelqu'un peut-il m'aider?

EDIT

je pense avoir la solution, juste besoin d'ajouter de l'animation, mais il travaille ensemble et que pour moi est fantastique!

function menuTap($this){ 

    var thisClass = $this.attr('class'); 

    if($this.parent().hasClass("top-menu")){ 
     $('.sub-menu.' + thisClass).animate().toggleClass('hide'); 
     $('.sub-menu' + ':not(.' + thisClass + '), .sub-sub-menu').addClass('hide'); 
    }; 

    if($this.parent().hasClass("sub-menu")){ 
     console.log($this.attr('class') + ' li was clicked') 
     $('.sub-sub-menu.' + thisClass).toggleClass('hide'); 
     $('.sub-sub-menu' + ':not(.' + thisClass + ')').addClass('hide'); 
    }; 

} 

$('.top-menu li, .sub-menu li').on('click',function(){ 
    menuTap($(this)); 
}); 

Répondre

1

Un obstacle majeur est votre structure HTML. Presque tous les menus auront quelque chose comme ça, où les sous-menus sont imbriquées à l'intérieur de leurs parents:

<ul class="topmenu"> 
    <li><a></a> 
    <ul class="submenu">...</ul> 
    </li> 
</ul> 

Alors que vous avez cela, avec les sous-menus frères et sœurs de leurs parents:

<ul class="topmenu"> 
    ... 
</ul> 

<ul class="submenu"> 
    ... 
</ul> 

Il est plus simple d'appeler des éléments à base sur une relation parent-enfant que par des classes ou des relations fraternelles.

Voici un début. Je n'ai plus de temps pour le moment. http://jsfiddle.net/isherwood/zuU5M/1/

+0

structure de menu normale n'a pas été la meilleure solution à ce problème car il était quelque chose que j'avais initialement essayé accomplir.La méthode que j'ai choisie est telle que les sous-sous-menus peuvent déchirer des sous-menus. avec le système de menu typique, le sous-sous-menu apparaîtra juste en bas. – Doug

+0

En fait, tout le point de cette structure est tel que les sous-menus apparaissent là où ils tombent dans la liste parente. Leur apparence dépend de vos spécificités CSS et jQuery. Quoi qu'il en soit, bonne chance. – isherwood

0

Veuillez vérifier ci-dessous le code. J'ai édité html, css et javascript.

code Javascript

<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script> 
<script type="text/javascript" src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 
<script> 
    $(document).ready(function(){ 
    jQuery('.topmenu-link').click(function(){ 
     if(!jQuery(this).hasClass('open')){ 
      jQuery('.topmenu-link').removeClass('open'); 
      jQuery('.submenu-part').stop(true,true).slideUp(); 
      jQuery(this).parent('.topmenu-item').children('.submenu-part').stop(true,true).slideDown(); 
      jQuery(this).addClass('open'); 
     }else{ 
      jQuery(this).removeClass('open'); 
      jQuery('.submenu-part').stop(true,true).slideUp(); 
     } 
    }); 

    }); 
</script> 
<!--script end--> 

Code Css

<!--css start--> 
<style> 
body{ 
    background-color: #333; 
    padding: 20px; 
    color:white; 
    font-family: arial; 
} 
a{ 
    color: aqua; 
} 
.clear{clear:both;} 
.topmenu{ 
    background-color: green; 
} 
ul{ 
    list-style: none; 
    margin: 0; 
    padding: 0; 
} 
li.topmenu-item{ 
    float: left; 
    margin: 0 2px 0 0; 
    cursor: pointer; 
    position:relative; 
    zoom:1; 

} 
.topmenu-link{ 
    padding: 20px; 
    display:block; 
} 
.submenu-part{ 
    background:#060; 
    width:200px; 
    padding:10px; 
    position:absolute; 
    top:59px; 
    left:0px; 
    display:none; 
} 
.submenu-item-link{ 
    margin:5px 0px; 
    display:block; 
} 
.submenu-item-link a{ 
    margin:8px 0px; 
    display:block; 
} 

</style> 
<!--css end--> 

Code Html

<!--html content start--> 
<nav> 
    <ul class="topmenu"> 
     <li class="topmenu-item"> 
      <a href="javascript:;" class="topmenu-link">top menu 1</a> 
      <ul class="submenu-part"> 
       <li class="submenu-item-link"><a href="" >top menu 1</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 2</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 3</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 4</a></li> 
      </ul> 
     </li> 

     <li class="topmenu-item"> 
      <a href="javascript:;" class="topmenu-link">top menu 2</a> 
      <ul class="submenu-part"> 
       <li class="submenu-item-link"><a href="" >top menu 1</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 2</a></li> 
      </ul> 
     </li> 

     <li class="topmenu-item"> 
      <a href="javascript:;" class="topmenu-link">top menu 3</a> 
      <ul class="submenu-part"> 
       <li class="submenu-item-link"><a href="" >top menu 1</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 2</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 3</a></li> 
      </ul> 
     </li> 

     <li class="topmenu-item"> 
      <a href="javascript:;" class="topmenu-link">top menu 4</a> 
      <ul class="submenu-part"> 
       <li class="submenu-item-link"><a href="" >top menu 1</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 2</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 3</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 4</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 5</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 6</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 7</a></li> 
       <li class="submenu-item-link"><a href="" >top menu 8</a></li> 
      </ul> 
     </li> 
     <li class="clear"></li> 
    </ul> 
</nav> 
<!--html content end-->