DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> jQuery制作橫向Accordion樣式的導航菜單
jQuery制作橫向Accordion樣式的導航菜單
編輯:關於JavaScript     

演示在本文後面

 

常見的 Accordion 菜單都是豎直為主,這次筆者要教各位寫一個變形的橫向 Accordion 式菜單,讓我們的選單硬是跟其它人不一樣。

廢話就不多寫了,直接來看 HTML:


以下是引用片段:
<body> 
    <div id="nav_container"> 
        <div class="navend"></div> 
        <ul id="nav"> 
            <li><a href=http://www.poluoluo.com class="abgne">破洛洛</a></li> 
            <li><a href="#" class="jelly">菜單</a></li> 
            <li><a href="#" class="jquery">jQuery</a></li> 
            <li><a href="#" class="intro">簡介</a></li> 
            <li><a href="#" class="about">關於</a></li> 
            <li><a href="#" class="help">幫助</a></li> 
        </ul> 
    </div> 
</body> 


基本的選單一樣都是用 ul 來做,但要注意的是那個 div.navend 區塊,它是用來放置最右邊邊框圖片用的,如果缺少了它會讓選單看起來突然被截斷了(因為我們每一個選單都有邊框)。

再來就看看 CSS 的部份:

以下是代碼片段:
#nav { 
    position: relative; 
    overflow: hidden; 
    list-style: none; 
    float: right; 
    width: 480px; 
    height: 30px; 
    margin: 0; 
    padding: 0; 

.navend { 
    float: right; 
    background-image: url(end.gif); 
    width: 5px; /* end.gif 的寬 */ 
    height: 30px; /* end.gif 的高 */ 

#nav li { 
    position: absolute; 
    overflow: hidden; 
    padding: 0; 
    margin: 0 ; 

#nav li a { 
    text-indent: -9999px; 
    display: block; 
    width: 170px; /* 預設的寬 */ 
    height: 30px; /* 圖片的高 */ 

a.abgne { 
    background-image: url(nav1.gif); 

a.jelly { 
    background-image: url(nav2.gif); 

a.jquery { 
    background-image: url(nav3.gif); 

a.intro { 
    background-image: url(nav4.gif); 

a.about { 
    background-image: url(nav5.gif); 

a.help { 
    background-image: url(nav6.gif); 


這邊要把 li 都設成 position: absolute;,這樣我們才能控制它的 left 屬性來做位置的移動。




筆者這邊取 64px 是用來當圖示 icon 用的,當選單被其它選單覆蓋時,至少還能看到圖示,等展開後才看到完整的內容。


不過我們選單位置預設都會是在 left: 0; 的位置,因此接下來整個部份就是靠 jQuery 來完成的:

以下是代碼片段:
$(function(){ 
    // 初始化參數 
    var _navLi = $("#nav li"), 
        speed = 200,    // 移動速度 
        maxWidth = 170,    // 最大寬 
        minWidth = 64,  // 最小寬 
        diffWidth = maxWidth - minWidth; 

    _navLi.each(function(i){ 
        var _this = $(this), 
            _prev = _this.prev(), 
            _left = !_prev.length ? 0 :(_prev.position().left + (i==1 ? maxWidth : minWidth)); 
        // 先把每一個 li 的位置都放到定位 
        // 並把 left 值記錄起來 
        _this.css("left", _left).data("left", _left); 
    }).mouseover(function(){ 
        // 當滑鼠移到選項時, 把它後面選項都滑動回去 
        // 再把自己跟前面的選項都往前滑  
        $(this).nextAll().each(slideBack).end().prevAll().andSelf().each(function(){ 
            var _this = $(this); 
            if(_navLi.index(_this)>0){ 
                _this.stop().animate({ 
                    left: _this.data("left") - diffWidth 
                }, speed); 
            } 
        }); 
    }); 

    // 當滑鼠離開 #nav 時把選項都滑回原來位置 
    $("#nav").mouseleave(function(){ 
        $("li", this).each(slideBack); 
    }); 

    // 控制選項的滑動 
    function slideBack(){ 
        var _this = $(this); 
        _this.stop().animate({ 
            left: _this.data("left") 
        }, speed); 
    } 
}); 



加上 jQuery 後來看看效果吧:

演示地址:http://www.poluoluo.com/example/jquery/1/test.html

 

轉載請注明破洛洛

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved