菜單欄展開和收起效果(純js)


2014年6月25日 15:36:29

需要關注的是: 

1.用cookie保存用戶當前點擊的菜單項,不打擾后端代碼

2.通過數學計算得到要顯示和隱藏的div

3.點擊事件是動態綁定到a標簽上的,因此當dom加載完后,再執行js,也就是寫在onload里

HTML如下:

 1 <h3 class="titleH3" id="101">aaaa</h3>
 2 <div class="subNav" id="1">
 3     <a href="#">1</a>
 4     <a href="#">2</a>
 5     <a href="#">3</a>
 6 </div>
 7 <h3 class="titleH3" id="102">bbbb</h3>
 8 <div class="subNav" id="2">
 9     <a href="#">11</a>
10     <a href="#">22</a>
11     <a href="#">33</a>
12 </div>

js如下:

 1 function showhide()
 2 {
 3     //綁定a鏈接的點擊事件
 4     //點擊a鏈接的時候將id寫進cookie
 5     var arrSubNav = document.getElementsByClassName('subNav');
 6     for (var i = 0; i < arrSubNav.length; i++) {
 7         var arrHref = arrSubNav[i].getElementsByTagName('a');
 8         for (var j = 0; j < arrHref.length; j++) {
 9             arrHref[j].onclick = function () {
10                 var nodeParent = this.parentNode; //獲取a鏈接所在的那個div塊兒的id,注意,此處用this
11                 var idParent = nodeParent.getAttribute('id');
12                 document.cookie="userCheck="+idParent+";domain=***.***.com;path=/***"; //用cookie記錄下用戶當前的選擇
13             }
14         }
15     }
16 
17     //從cookie里取值,展開指定div
18     userCheck = getUserCheckInfo();
19     if (userCheck > 0) {
20         for (var i = 0; i < arrSubNav.length; i++ ) {
21             arrSubNav[i].style.display = 'none';
22         }
23         document.getElementById(userCheck).style.display = 'block';
24     } else {
25         document.getElementById('3').style.display = 'block';
26     }
27 
28     //點擊標題時展開其下的菜單
29     var arrTitle = document.getElementsByClassName('titleH3');
30     for (var i = 0; i < arrTitle.length; i++) {
31         arrTitle[i].onclick = function () {
32             var idTitle = this.getAttribute('id');
33             var idSubNav = idTitle % 100; //根據title的id獲取子菜單div的id
34             
35             for (var i = 0; i < arrSubNav.length; i++ ) {
36                 arrSubNav[i].style.display = 'none';
37             }
38             document.getElementById(idSubNav).style.display = 'block';
39 
40         }
41     };
42 }
43 
44 function getUserCheckInfo()
45 {
46     var strCookie = document.cookie;
47     //將多cookie切割為多個名/值對 
48     var arrCookie=strCookie.split("; "); 
49     var userCheck = '0'; 
50     //遍歷cookie數組,處理每個cookie對 
51     for(var i=0;i<arrCookie.length;i++) { 
52         var arr=arrCookie[i].split("="); 
53         if("userCheck"==arr[0]){ 
54             userCheck=arr[1]; 
55             break; 
56         } 
57     } 
58     return userCheck;
59 }

 變量名沒有起好,userCheck應該為userChoice或者userSelected更恰當,他是用來保存用戶點擊的菜單的id的


免責聲明!

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



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