我刚刚开始使用jQuery。我想做一个简单的'ul'下拉菜单来提高我的理解。基本流程是这样的:构建jQuery下拉菜单需要帮助
'ul.menu li ul'显示:none >>关于li悬停,获得&存储高度'this'ul >>设置'this'ul的高度为0 >>集显来阻止>>动画高度原始存储的高度
我知道已经有用于下拉列表一些伟大的插件,但我真的想推出自己得到更好的理解的jQuery。
到目前为止,我已成功以下,非常做得不好(在这里看到现场版 - http://jsbin.com/eduvi):
var $j = jQuery.noConflict();
$j(document).ready(function(){
// Get height of current hidden ul
$j("ul.menu li").hover(function() {
getHeight($j("ul", this).height());
});
// Set height to 0px
$j('ul.menu li').hover(function() {
$j("ul", this).css({"height":"0px"});
});
// Set display to block
$j('ul.menu li').hover(function() {
$j("ul", this).css({"display":"block"});
});
// Animate height to stored height
$j('ul.menu li').hover(function getHeight(h) {
$j('ul:first', this).stop().animate({ "height" : "100%" } , 400);
});
// Display height of current hidden ul
function getHeight(h) {
$j("div.test").text("The height for the hidden ul is " + h + "px."); }
});
我想知道我怎么得到它使用存储的原始高度,而不是100%。
其次,我敢肯定,这都可以降低冷凝成短短的几行,但真的没有线索如何做到这一点呢。
非常感谢任何帮助!
UPDATE: OK,所以我几乎没有。我使用Marve发布的代码作为基础,并在其他位中工作。唯一不起作用的是我需要将隐藏的UL的高度重新设置为最初的高度,并将它的显示设置为无,因此它已准备好再次悬停。任何想法,为什么它不会工作?
$j('ul.menu > li').hover(
function() { var ulHeight = $j('ul', this).height(); $j(this).children('ul').css({height: 0}).stop().animate({height: ulHeight}, 400); },
function() { $j(this).children('ul').stop().animate({height: 0}, 400).css({height: ulHeight, display:none}); }
);
谢谢,其实我与那些开始了,但问题是,你不能用停止功能和他们在一起,所以你如果做了许多翻车得到一个问题,因为菜单会计算每一个并执行它。所以我决定去这条路线,这样我就可以使用动画。此外,我打算让其他子菜单水平飞出,所以我需要再使用动画。 – 2009-09-21 15:56:14
同意你可能必须使用'.animate'作为子菜单,但我不确定我是否遵循了为什么使用幻灯片功能至少不能用于顶层。注意:我修改了我的代码片段悬停函数中的选择器,以确保只有直接的后代菜单才会动画。 – dcharles 2009-09-21 16:23:54
这里提到的是同样的东西 - http://jqueryfordesigners.com/broken-repeating-animations/ - 如果你反复翻看菜单,然后离开,它会继续射击。 – 2009-09-21 16:35:21