2013-07-23 2 views
1

Мне нужна помощь. Я везде искал, но я думаю, что то, что я ищу, немного уникально.горизонтальное меню jQuery с подсетонами

Я пытаюсь создать меню, которое, когда вы нажимаете на опцию меню, представляет собой группу опций. Я думаю, этот бит у меня получился. то, что я пытаюсь достичь сейчас, это заставить его позволить детям подменю скользить между линиями ссылок напрямую. вроде как меню горизонтального аккордеона, с завихрением наличия всех ссылок верхнего меню в строке, а не вертикально.

действие, нажмите на элемент topmenu и появятся подменю. если нажата ссылка подменю, эта ссылка содержит элементы под-подменю, соответствующие этой исходной ссылке, и скрывает всех, кроме себя и своих родителей.

имейте в виду, если им объяснять это правильно. моя голова немного глупая от попыток решить эту проблему в течение всего дня и им о прогибаться в

это пример того, что им пытаются достичь:.

enter image description here

если вы хотите идите сюда, чтобы увидеть то, что я сделал http://jsfiddle.net/pi_mai/zuU5M/ Так я пытаюсь сделать меню с этим HTML кодом (я удалить много элементов ссылки, чтобы сократить код):

<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'); 
    }); 

Может ли кто-нибудь мне помочь?

EDIT

Я думаю, что у меня есть решение, просто нужно добавить анимацию, но это в целом работает, и что для меня это просто фантастика!

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)); 
}); 

ответ

1

Одним из основных препятствий является ваша структура HTML. Почти все меню будет иметь что-то вроде этого, где субменю вложен внутри своих родителей:

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

В то время как у вас есть это, с подменю, как братьев и сестер своих родителей:

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

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

Это проще называть элементы на основе по отношению к родительскому и дочернему отношениям, чем по классам или родственным отношениям.

Это старт. На данный момент у меня нет времени. http://jsfiddle.net/isherwood/zuU5M/1/

+0

Нормальная структура меню не является лучшим решением этой проблемы, как это было что-то я первоначально пытался для достижения.Метод, который у меня есть chossen, так что суб-подменю может разрывать подменю. с типичной системой меню суб-подменю будет просто отображаться внизу. – Doug

+0

На самом деле, вся суть этой структуры такова, что подменю появляются там, где они попадают в родительский список. Как они выглядят, зависит от ваших особенностей CSS и jQuery. Во всяком случае, удачи. – isherwood

0

, пожалуйста, проверьте ниже код. Я редактировал html, css и javascript.

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--> 

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--> 

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--> 
Смежные вопросы