jQuery slideToggle在菜单切换上跳转动画

时间:2016-03-01 19:29:19

标签: javascript jquery css drop-down-menu menu

所以我的问题就像标题一样简单,当我点击大黑&#34; V&#34;要切换我的菜单,动画会在子菜单上跳转<li>

我尝试了多项内容但似乎都没有用,我在width遇到类似问题,我通过将width设置为100%来解决。在我的搜索中,我看到人们jQuery无法弄清楚元素的高度,但如果我尝试为元素添加高度,它就会破坏菜单。

这是代码笔,因此您可以体验我的问题。 CODEPEN

HTML

    <nav class="main-menu">
   <ul>
      <li class="level-1"><a href="<?php echo get_category_link( 5 ) ?>">Item 1</a>
         <span class="toggle-1">V</span>
         <ul class="sub-menu-1">
            <li class="level-2"><a href="<?php echo get_category_link( 9 ) ?>">Item 1.1</a>
               <span class="toggle-2">V</span>
               <ul class="sub-menu-2">
                  <li class="level-3"><a href="<?php echo get_category_link( 11 ) ?>">Item 1.1.1</a></li>
                  <li class="level-3"><a href="<?php echo get_category_link( 12 ) ?>">Item 1.1.2</a></li>
                  <li class="level-3"><a href="<?php echo get_category_link( 13 ) ?>">Item 1.1.3</a></li>
                  <li class="level-3"><a href="<?php echo get_category_link( 14 ) ?>">Item 1.1.4</a></li>
               </ul>
            </li>
            <li class="level-2"><a href="<?php echo get_category_link( 10 ) ?>">Item 1.2</a>
               <span class="toggle-2">V</span>
               <ul class="sub-menu-2">
                  <li class="level-3"><a href="<?php echo get_category_link( 15 ) ?>">Item 1.2.1</a></li>
                  <li class="level-3"><a href="<?php echo get_category_link( 16 ) ?>">Item 1.2.2</a></li>
               </ul>
            </li>
            <li class="level-2"><a href="<?php echo get_category_link( 25 ) ?>">Item 1.3</a></li>
         </ul>
      </li>
      <li class="level-1"><a href="<?php echo get_category_link( 6 ) ?>">Item 2</a>
         <span class="toggle-1">V</span>
         <ul class="sub-menu-1">
            <li class="level-2"><a href="<?php echo get_category_link( 18 ) ?>">Item 2.1</a></li>
            <li class="level-2"><a href="<?php echo get_category_link( 19 ) ?>">Item 2.2</a></li>
            <li class="level-2"><a href="<?php echo get_category_link( 20 ) ?>">Item 2.3</a></li>
            <li class="level-2"><a href="<?php echo get_category_link( 21 ) ?>">Item 2.4</a></li>
            <li class="level-2"><a href="<?php echo get_category_link( 22 ) ?>">Item 2.5</a></li>
         </ul>
      </li>
      <li class="level-1"><a href="<?php echo get_category_link( 7 ) ?>">Item 3</a></li>
      <li class="level-1"><a href="<?php echo get_category_link( 8 ) ?>">BItem 4</a>
         <span class="toggle-1">V</span>
         <ul class="sub-menu-1">
            <li class="level-2"><a href="<?php echo get_category_link( 23 ) ?>">Item 4.1</a></li>
            <li class="level-2"><a href="<?php echo get_category_link( 24 ) ?>">Item 4.2</a></li>
         </ul>
      </li>
   </ul>
</nav>

CSS

.main-menu .sub-menu-1, .main-menu .sub-menu-2 {
    display: none;
}
.main-menu ul {
    width: 100%;
}
.main-menu li {
    line-height: 25px;
}
.main-menu li.level-1 {
    background-color: red;
}
.main-menu li.level-2 {
    background-color: lightblue;
}
.main-menu li.level-3 {
    background-color: yellow;
}
.main-menu a {
    display: block;
    margin-right: 20px;
}
.main-menu .toggle-1, .main-menu .toggle-2 {
    display: block;
    float: right;;
    font-size: 20px;
    font-weight: bold;
    width: 20px;
    transform: translateY(-25px);
}

使用Javascript / jQuery的

$(document).ready(function() {

      $('.sub-menu-1, .sub-menu-2').hide();
      $('.toggle-1').click( function() {
         $(this).next('.sub-menu-1').slideToggle();
      });

      $('.toggle-2').click( function() {
         $(this).next('.sub-menu-2').slideToggle();
      });

   });

提前感谢您,希望有人能帮助我。

2 个答案:

答案 0 :(得分:0)

我认为唯一的问题是你没有将clear属性设置为浮点数。如果你设置它:

.main-menu a {
    margin-right: 20px;
}
.main-menu .toggle-1, .main-menu .toggle-2 {
    float: right;
    clear: none;
    font-size: 20px;
    font-weight: bold;
    width: 20px;
}
你很好。然后你也不需要transform: translate来移回你的元素。这是您的代码集的一个分支:http://codepen.io/anon/pen/WwbPLV

答案 1 :(得分:0)

问题来自您在css中设置为<span>的{​​{1}}。

display: block;.main-menu a切换为.main-menu .toggle-1, .main-menu .toggle-2都可以解决问题。然后,您还可以删除以前用于强行将这些元素放在文档流位置之外的其他一些不必要的css hacks。

更新的CSS位于下方,你可以看到笔的一个叉子,两个子菜单都在工作here

display: inline-block;