無限級下拉菜單(樹形菜單,二級菜單)


不管是在導航欄還是頂部的功能條,基本都會用到二級菜單或者三級菜單等等,今天,就使用原生JS來實現這種功能,我個人加上了定時器,用戶體驗會更好。

HTML:

   1.  布局清晰

   2. 所有的li 都是相對定位

   3.  所有的子級列表ul 都是絕對定位

JS分析:

   1.  首先獲取下拉菜單中的所以的li,然后遍歷li,給每一個li加事件,清除定時器 ,不要忘記

   2.  事件內套一個setTimeout() ,用來延遲下級菜單的顯示時間,防止操作二級菜單,這其中自執行函數或者var that = this 都可以,防止i值錯誤

   3.  獲取當前li 下面的第一個ul列表,也就是下級菜單

   4.  判斷這個ul 列表是否存在,存在就它顯示 .   這是關鍵

   5. 鼠標移出事件和移入事件基本一樣,移出讓當前li下的ul 隱藏。

  整體來說,二級菜單沒有很強的邏輯性,但是對於初學者來說,這種無限下拉菜單,也並不是很簡單,咋一看好像很難,但是希望你踏出這一步。還有一點就是,你的腦子里必須有清晰html結構,元素先不要隱藏,看清楚你的布局。把結構都寫清楚了,那么對寫js部分也是很有幫助的

 

 1 <!doctype html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title></title>
 6 <style>
 7 *{ margin:0; padding:0; list-style:none;}
 8 #ul1 li{ width:100px; height:30px; line-height:30px; text-align:center; float:left; border:1px solid #000; background:#ccc; position:relative;}
 9 #ul1 li:hover{ background:#f60;}
10 .son{  display:none;}
11 .graSon{ display:none;position:absolute; left:100px; top:-1px;}
12 
13 </style>
14 <script>
15 window.onload = function(){
16     var oUl1 = document.getElementById('ul1');
17     var aLi = oUl1.getElementsByTagName('li');//獲取所以的li
18     var timer = null;//設置定時器
19 
20     //遍歷所有的li
21     for(var i = 0;i < aLi.length; i++){
22         //給每一個li加鼠標移入事件
23         aLi[i].onmouseover = function(){
24             clearTimeout(this.timer);//先清除定時器
25             var that = this;// 用that 代替this 在定時器中使用
26             this.timer = setTimeout(function(){
27                 //獲取當然li下面的第一個ul列表即下級菜單
28                 var oUl =that.getElementsByTagName('ul')[0];
29                 //判斷列表是否存在,存在就讓它顯示
30                 if(oUl){
31                     oUl.style.display = 'block';    
32                 }        
33             },300);
34         }
35         // 鼠標移出事件  
36         aLi[i].onmouseout = function(){
37             clearTimeout(this.timer);
38             var that = this;
39             this.timer = setTimeout(function(){
40                 var oUl =that.getElementsByTagName('ul')[0];
41                 if(oUl){
42                     oUl.style.display = 'none';    
43                 }        
44             },300);
45         }    
46     }
47 }
48 </script>
49 </head>
50 <body>
51 <ul id="ul1">
52     <li>首頁</li>
53     <li>
54         <span>公司簡介 ▼</span>
55         <ul class="son">
56             <li>大事記</li>
57             <li>
58                 <span>領導致辭 ▶</span>
59                 <ul class="graSon">
60                     <li>
61                         <span>2013年 ▶</span>
62                         <ul class="graSon">
63                             <li>10月份</li>
64                             <li>9月份</li>
65                             <li>8月份</li>
66                         </ul>
67                     </li>
68                     <li>2012年</li>
69                 </ul>
70             </li>
71             <li>企業文化</li>
72         </ul>
73     </li>
74     <li>聯系我們</li>
75     <li>
76         <span>產品展示 ▼</span>
77         <ul class="son">
78             <li>康師傅</li>
79             <li>老譚</li>
80             <li>今麥郎</li>
81         </ul>
82     </li>
83 </ul>
84 </body>
85 </html>

 


免責聲明!

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



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