【发布时间】:2014-04-26 14:13:09
【问题描述】:
我有一个列表,其中一些项目有子导航:
<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>
我有这个脚本,它会在单击 .slidedown-toggle 时计算子导航 <ul> 的高度,然后根据父级 <li> 将其更改为 0,该类具有已切换的“打开”类。
$(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'});
}
});
});
我遇到的问题是,有时“open”类已经添加了<li class="slidedown">,因为当您在“subnav”页面上时,我希望扩展菜单以显示您所在的位置。因为我在 CSS 中为 .slidedown.open 设置了 height: auto,所以当您第一次单击“打开”项目。
了解我在说什么的最简单方法是查看 JSBIN。单击第二个“显示菜单”,它可以很好地上下滑动。单击第一个,第一次单击不会滑动(因为高度自动)。我该如何解决?也许先设置点击高度,然后设置为0?
【问题讨论】: