点击一次即可将此子导航向上滑动的高度
点击一次即可将此子导航向上滑动的高度
我有一个列表,其中一些项目有子导航:\n
\n我有这个脚本,当点击.slidedown-toggle
时,它计算子导航
- 的高度,然后根据具有\'toggle\'类的父
将其更改为0。\n
$(document).ready( function(){ var $slidedownToggle = $('.nav-sidebar .slidedown-toggle'); $slidedownToggle.click(function () { var $slidedown = $(this).parent('.slidedown'); // 获取容器项目 var $subnav = $(this).siblings('.nav-sub'); // 获取需要上下滑动的ul var totalHeight = 0; // 计算显示所有
\n我遇到的问题是,有时
.slidedown.open
的CSS中设置了height: auto
,所以高度在首次点击\'slidedown-toggle\'时没有动画效果(我知道整个使用max-height进行滑动,但我不想要这个)。如何解决这个问题?也许先在点击时设置高度,然后将其设置为0?\n最简单的方法是查看JSBIN。点击第二个\'show menu\'时,它会很好地上下滑动。点击第一个时,第一次点击不会滑动(因为高度是自动的)。我该如何解决这个问题?http://jsbin.com/poxiy/2/edit
这个问题的出现原因是想要实现一个导航栏,在鼠标悬停在父级菜单项上时显示子菜单,鼠标移开时隐藏子菜单。然而,这个功能只在悬停时生效,而不是在点击时生效。
解决方法是修改JavaScript代码,使得子菜单在第一次点击父级菜单项时显示,再次点击时隐藏。以下是修改后的代码:
JavaScript:
$(document).ready(function() { $('#nav li').click(function() { if ($(this).children('ul').is(':hidden')) { $(this).children('ul').slideDown(); } else { $(this).children('ul').slideUp(); } }); });
通过修改代码,可以实现在第一次点击父级菜单项时显示子菜单,再次点击时隐藏子菜单的功能。
问题的原因是当点击子导航时,无法实现平滑的向上滑动效果。为了解决这个问题,使用了一个不太优雅的方法,即在ready处理程序中为打开的子导航分配一个高度。代码如下:
$('.nav-sidebar .slidedown.open .nav-sub').height(function(){ return $(this).height(); })
另外,还提供了另一种解决方法的讨论链接,可以参考下面的帖子:
- [CSS transition height: 0; to height: auto;](https://stackoverflow.com/questions/3508605)
- [CSS transition auto height not working](https://stackoverflow.com/questions/13938460)
有人问到为什么这被称为“nasty hack”(不太优雅的方法)。虽然还有其他CSS解决方案,但当子导航的长度不同且某些情况下非常长时,这些解决方案会失败。也许使用标准的`.show()`和`.hide()`方法会更好,但是与CSS动画相比,我发现动画有时会有些卡顿。(我对CSS动画不是专家)我之所以称其为“nasty hack”,是因为可能存在更优雅的解决方案,而我们现在所做的是一种hack方法。