jquery - 高度让这个子导航在第一次点击时向上滑动

标签 jquery css

我有一个列表,其中一些元素有子导航:

  <ul role="menu">
    <li role="menuitem">
      <a href="#" class="clearfix">Top Level</a>
    </li>
    <li class="slidedown open" role="menuitem">
      <a href="#" class="clearfix">Top Level</a>
      <span class="slidedown-toggle">Show Sub Menu</span>
      <!-- Subnav -->
      <ul class="list-reset nav-sub" role="menu">
        <li role="menuitem">
          <a href="#">Second Level</a>
        </li>
        <li role="menuitem">
          <a href="#">Second Level</a>
        </li>
        <li role="menuitem">
          <a href="#">Second Level</a>
        </li>
      </ul>
    </li>
  </ul>

我有这个脚本,它计算子导航的高度 <ul>.slidedown-toggle单击,然后根据父级将其更改为 0 <li>具有切换的“打开”类。

$(document).ready( function(){ 

  var $slidedownToggle = $('.nav-sidebar .slidedown-toggle');

  $slidedownToggle.click(function () {

    var $slidedown = $(this).parent('.slidedown'); // Get the container item
    var $subnav = $(this).siblings('.nav-sub'); // Get the ul that needs to slide up/down

    var totalHeight = 0; // Calculate the height required (in px) to show all <li>'s
    $subnav.find('li').each(function() {
      totalHeight += $(this).outerHeight(true);
    });

    // Toggle 'open' class on the parent <li>
    $slidedown.toggleClass('open');

    // Set the appropriate height
    if ($slidedown.hasClass('open')) {
      $subnav.css({height: totalHeight + 'px'});
    } else {
      $subnav.css({height: '0px'});
    }

  });

});

我遇到的问题是有时“打开”类已经被添加到 <li class="slidedown">因为当您在“子导航”页面上时,我希望菜单展开以显示您所在的位置。因为我设置了height: auto.slidedown.open 的 CSS 中,当您第一次单击“打开”元素的滑动切换时,高度不是动画的(我知道使用最大高度的整个滑动,但我不希望那样)。

查看我正在讨论的内容的最简单方法是查看 JSBIN。单击第二个“显示菜单”,它会很好地上下滑动。单击第一个,第一次单击不会滑动(因为高度自动)。我该如何解决?也许先设置点击高度,然后将其设置为 0?

http://jsbin.com/poxiy/2/edit

最佳答案

这是一个讨厌的 hack,它可以工作......在准备好的处理程序上为打开的子导航分配高度

$('.nav-sidebar .slidedown.open .nav-sub').height(function(){
    return $(this).height();
})

演示:Fiddle

另一种解决方案在下面的帖子中讨论

关于jquery - 高度让这个子导航在第一次点击时向上滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521016/

相关文章:

android - CSS Flex 支持 Android WebView 和 iOS UIWebView

javascript - 动态删除html文件脚本标签之间的所有内容

javascript - 简单的 Bootstrap 4 轮播,下一张幻灯片的一部分靠近主轮播元素

html - 如何防止切换复选框元素与另一个元素重叠?

html - 边框,在单元格附近重叠

jquery css 背景图像仅适用于 firefox

javascript - 事件传播问题

jquery - 我正在尝试使用阅读更多按钮创建多个弹出窗口

javascript - 第二次点击打开超链接的最佳方法

html - 适用于除 Firefox 以外的所有浏览器