我剛剛開始使用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