javascript實現下拉二級菜單


---恢復內容開始---

    之前在網上看到如何用jquery來實現二級下拉菜單,jquery對事件應用的方法都比較直接且簡單高效,但是我們這不利於我們對於原生的JS的理解。在此,我使用原生JS來實現下拉二級菜單。

    實現下拉二級菜單的方法有多種

  1.給一級菜單和二級菜單設置一個div,並且使其二級菜單部分隱藏。

  2.設置好CSS樣式后,給每一個一級菜單都添加一個onmouseover事件和onmouseout事件,這種方法有一個明顯的缺陷,就是當一級菜單比較多的時候,會造成代碼冗余。

  3.使用for循環結合children結構偽類選擇器來實現其鼠標移入下拉的功能。

  html和css如下所示

<div id="nav">
                <ul>
                    <li>
                        <a href="#">html元素</a>
                        <div>
                            <a href="#">list-style</a>
                            <a href="#">decoration</a>
                            <a href="#">line-height</a>
                        </div>
                    </li>
                    <li>
                        <a href="#">js部分</a>
                        <div>
                            <a href="#">事件冒泡</a>
                            <a href="#">跨域</a>
                            <a href="#">ajax</a>
                        </div>
                    </li>
                    <li>
                        <a href="">jquery方法</a>
                        <div>
                            <a href="#">filter</a>
                            <a href="#">has</a>
                            <a href="#">find</a>
                            <a href="#">html</a>
                        </div>
                    </li>
                </ul>
            </div>

 

   這里的html使用的實例嵌套div的方法,結構比較簡單。

<style type="text/css">
            *{
                margin: 0px;
                padding:0px;
                font-size: 20px;
            }
            #nav{
                width:440px;
                background: #9ACD32;
                margin:auto;
            }
            #nav ul{
                list-style: none;
            }
            #nav ul li{
                width:110px;
                float: left;
            }
            #nav ul li a{
                display: block;
                text-decoration: none;
                text-align: center;
                background: #FF9090;
            }
            #nav ul li a:hover{
                background: #CCCCDD;
            }
            #nav ul li div {
                font-size: 18px;
                display: none;    
                
            }
            #nav ul li div a{
                font-size: 16px;
                line-height: 25px;
                text-align: center;
                background: #CCCCDD;    
                transition: background 2s;
            }
            #nav ul li div a:hover{
                background: #FF9090;
                font-size:19px;
            }
        </style>

  以上就是整個代碼的結構層和表現層了,現在為了實現鼠標移入下拉菜單的功能。

<script type="text/javascript">
        window.onload=function(){
            var aLi=document.getElementById("nav").getElementsByTagName("li"); 
            for(var i=0; i<aLi.length;i++){
                
                aLi[i].onmouseover=function(){
                    this.children[1].style.display='block';//選取當前li元素的第二個子元素
                }
                aLi[i].onmouseout=function(){
                    this.children[1].style.display='none';
                }
            }
        }
    </script>

  在這js代碼中,可能有些人不是很理解this.children[1]的含義,我們在對ul下的li做了for循環之后,需要的是將display為none的div顯示出來,聽過children偽類選擇器可以選擇li的第二個子元素(選擇器部分,可以查w3cshool)。通過這種選擇器,我們在只使用一次for循環就實現了鼠標移入菜單下拉的功能。

---恢復內容結束---

    之前在網上看到如何用jquery來實現二級下拉菜單,jquery對事件應用的方法都比較直接且簡單高效,但是我們這不利於我們對於原生的JS的理解。在此,我使用原生JS來實現下拉二級菜單。

    實現下拉二級菜單的方法有多種

  1.給一級菜單和二級菜單設置一個div,並且使其二級菜單部分隱藏。

  2.設置好CSS樣式后,給每一個一級菜單都添加一個onmouseover事件和onmouseout事件,這種方法有一個明顯的缺陷,就是當一級菜單比較多的時候,會造成代碼冗余。

  3.使用for循環結合children結構偽類選擇器來實現其鼠標移入下拉的功能。

  html和css如下所示

 1 <div id="nav">
 2                 <ul>
 3                     <li>
 4                         <a href="#">html元素</a>
 5                         <div>
 6                             <a href="#">list-style</a>
 7                             <a href="#">decoration</a>
 8                             <a href="#">line-height</a>
 9                         </div>
10                     </li>
11                     <li>
12                         <a href="#">js部分</a>
13                         <div>
14                             <a href="#">事件冒泡</a>
15                             <a href="#">跨域</a>
16                             <a href="#">ajax</a>
17                         </div>
18                     </li>
19                     <li>
20                         <a href="">jquery方法</a>
21                         <div>
22                             <a href="#">filter</a>
23                             <a href="#">has</a>
24                             <a href="#">find</a>
25                             <a href="#">html</a>
26                         </div>
27                     </li>
28                 </ul>
29             </div>

   這里的html使用的實例嵌套div的方法,結構比較簡單。

<style type="text/css">
            *{
                margin: 0px;
                padding:0px;
                font-size: 20px;
            }
            #nav{
                width:440px;
                background: #9ACD32;
                margin:auto;
            }
            #nav ul{
                list-style: none;
            }
            #nav ul li{
                width:110px;
                float: left;
            }
            #nav ul li a{
                display: block;
                text-decoration: none;
                text-align: center;
                background: #FF9090;
            }
            #nav ul li a:hover{
                background: #CCCCDD;
            }
            #nav ul li div {
                font-size: 18px;
                display: none;    
                
            }
            #nav ul li div a{
                font-size: 16px;
                line-height: 25px;
                text-align: center;
                background: #CCCCDD;    
                transition: background 2s;
            }
            #nav ul li div a:hover{
                background: #FF9090;
                font-size:19px;
            }
        </style>

  以上就是整個代碼的結構層和表現層了,現在為了實現鼠標移入下拉菜單的功能。

<script type="text/javascript">
        window.onload=function(){
            var aLi=document.getElementById("nav").getElementsByTagName("li"); 
            for(var i=0; i<aLi.length;i++){
                
                aLi[i].onmouseover=function(){
                    this.children[1].style.display='block';//選取當前li元素的第二個子元素
                }
                aLi[i].onmouseout=function(){
                    this.children[1].style.display='none';
                }
            }
        }
    </script>

  在這js代碼中,可能有些人不是很理解this.children[1]的含義,我們在對ul下的li做了for循環之后,需要的是將display為none的div顯示出來,聽過children偽類選擇器可以選擇li的第二個子元素(選擇器部分,可以查w3cshool)。通過這種選擇器,我們在只使用一次for循環就實現了鼠標移入菜單下拉的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM