JavaScript事件與例子(三)
阿新 • • 發佈:2022-04-29
兩個例子,好友選中效果和左側右側子選單
一、好友選中效果
可以通過設定屬性的方式判斷當前是否被選中,也可以通過獲取當前元素的顏色從而得知當前元素狀態是否被選中,從而進行操作
1.通過設定屬性的方式判斷選中的元素
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>好友選中</title> 6 <style> 7 *{ 8 margin:0px auto; 9 padding:0px; 10 } 11 #wai{ 12 height:400px; 13 width:200px; 14 margin-top:100px; 15 margin-left:100px; 16 } 17 .li{ 18 height:30px; 19 width:200px; 20 background-color:blue; 21 border:1px solid white; 22 text-align:center; 23 line-height:30px; 24 vertical-align:middle;} 25 26 </style> 27 </head> 28 29 <body> 30 <div id="wai"> 31 <div class="li" ys="0" onmouseover="bian(this)" onclick="xuan(this)" onmouseout="li(this)">風吹柳葉遮黃雀</div> 32 <div class="li" ys="0" onmouseover="bian(this)" onclick="xuan(this)" onmouseout="li(this)">薄翅不覺已落蟬</div> 33 <div class="li" ys="0" onmouseover="bian(this)" onclick="xuan(this)" onmouseout="li(this)">誰將新樽辭舊月</div> 34 <div class="li" ys="0" onmouseover="bian(this)" onclick="xuan(this)" onmouseout="li(this)">今月曾今朝故人</div> 35 </div> 36 </body> 37 </html> 38 <script> 39 //首先獲取到所有好友列表 40 var l=document.getElementsByClassName("li"); 41 //滑鼠單擊事件 42 function xuan(b){ 43 //遍歷陣列,設定屬性ys的值為0,顏色為藍 44 for(var i=0;i<l.length;i++){ 45 l[i].setAttribute("ys","0"); 46 l[i].style.backgroundColor="blue"; 47 } 48 //當前元素ys屬性值為1,顏色為紅 49 b.setAttribute("ys","1"); 50 b.style.backgroundColor="red"; 51 } 52 53 //滑鼠移上的效果 54 function bian(a){ 55 //遍歷陣列內容,只要ys屬性的值是0,顏色變為藍色 56 for(var i=0;i<l.length;i++){ 57 if(l[i].getAttribute("ys")=="0"){ 58 l[i].style.backgroundColor="blue"; 59 } 60 } 61 //獲取當前元素ys屬性值如為0,則顏色變為綠 62 if(a.getAttribute("ys")=="0"){ 63 a.style.backgroundColor="green"; 64 } 65 } 66 //滑鼠離開事件 67 function li(c){ 68 //如果當前元素ys值為0,顏色設為藍色 69 if(c.getAttribute("ys")=="0"){ 70 c.style.backgroundColor="blue"; 71 } 72 } 73 </script>
2.通過獲取當前元素顏色的方式判斷
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>好友選中</title> 6 <style> 7 *{ 8 margin:0px auto; 9 } 10 #wai{ 11 margin-top:100px; 12 margin-left:100px; 13 width:300px; 14 height:300px;} 15 .li{ 16 margin:1px; 17 background-color:white; 18 font-family:微軟雅黑; 19 font-size:16px; 20 text-align:center; 21 width:300px; 22 height:50px; 23 line-height:50px; 24 vertical-align:middle; 25 float:left;} 26 </style> 27 </head> 28 29 <body> 30 <div id="wai"> 31 <div class="li" onmouseover="yishang(this)" onclick="dianJi(this)" onmouseout="zou(this)">風吹柳葉遮黃雀</div> 32 <div class="li" onmouseover="yishang(this)" onclick="dianJi(this)" onmouseout="zou(this)">薄翅不覺已落蟬</div> 33 <div class="li" onmouseover="yishang(this)" onclick="dianJi(this)" onmouseout="zou(this)">誰將新樽辭舊月</div> 34 <div class="li" onmouseover="yishang(this)" onclick="dianJi(this)" onmouseout="zou(this)">今月曾經照古人</div> 35 </div> 36 </body> 37 </html> 38 <script> 39 //之前曾經用給每個div加id,然後函式傳回id的方式,錯誤,因為這樣函式寫在div傳回自己的用this,如果函式傳回的是下面的div的改變,可以嘗試用加div 40 41 //獲取所有列表好友到陣列 42 var z=document.getElementsByClassName('li'); 43 44 //滑鼠移上的效果 45 function yishang(s){ 46 //遍歷陣列,判斷每個顏色是綠色即移上狀態,則顏色設為白色即初始顏色,如果顏色是藍色即選中狀態,則跳出本次迴圈顏色依舊為藍色 47 48 for(i=0;i<z.length;i++){ 49 if(z[i].style.backgroundColor=="green"){ 50 z[i].style.backgroundColor="white"; 51 }else if(z[i].style.backgroundColor=="blue"){ 52 //跳出本次迴圈 53 continue; 54 } 55 //在判斷當前元素顏色是否是藍色即被選中狀態,是則跳出即狀態不變,否則顏色設為綠色即滑鼠移上的效果 56 if(s.style.backgroundColor=="blue"){ 57 continue; 58 }else{ 59 s.style.backgroundColor="green"; 60 } 61 /* 62 此方法原本作為對上面方法的優化,可以直接判斷現在的顏色如果是白色,則變為綠色,該方法的漏洞在於,當前沒有顏色可以獲取 63 如果使用該方法,應當在元素中內聯顏色 64 if(s.style.backgroundColor=="white"){ 65 s.style.backgroundColor="green"; 66 }e*/ 67 } 68 } 69 //滑鼠單擊事件,滑鼠單擊首先將所有元素設定為初始白色,然後當前顏色設為藍色 70 function dianJi(y){ 71 for(i=0;i<z.length;i++){ 72 z[i].style.backgroundColor="white"; 73 } 74 y.style.backgroundColor="blue"; 75 } 76 //滑鼠離開事件,滑鼠離開如果顏色是綠色即未被選中,則變為白色 77 function zou(z){ 78 if(z.style.backgroundColor=="green"){ 79 z.style.backgroundColor="white"; 80 } 81 } 82 </script>
使用這種方法,為何能夠獲取到當前元素顏色進行判斷?首先滑鼠移上,執行函式 yishang(),然後進for迴圈遍歷進行判斷,不符合判斷任何一種情況,則無操作,進行下一個判斷,如果當前元素顏色是被選中狀態則跳出,如果不是則設為綠色,第一個顏色就這樣賦值上了
這個問題我出錯的幾點需要注意:
1.在函式中,什麼時候用陣列元素的樣式,什麼時候用當前元素的樣式多次搞錯
2.判斷中判斷樣式是否是該顏色,一定要用==
二、左側右側子選單
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>子選單</title> 6 <style> 7 *{ 8 margin:0px auto; 9 padding:0px;} 10 #wai{ 11 margin-top:150px; 12 margin-left:200px; 13 height:300px; 14 width:100px;} 15 .li{ 16 height:30px; 17 width:100px; 18 background-color:#0FF; 19 line-height:30px; 20 vertical-align:middle; 21 text-align:center; 22 border:1px solid white; 23 } 24 .li1{ 25 height:30px; 26 width:100px; 27 background-color:#0F0; 28 line-height:30px; 29 vertical-align:middle; 30 text-align:center; 31 border:1px solid white; 32 } 33 34 .li:hover{ 35 background-color:#FF3; 36 } 37 .li1:hover{ 38 background-color:#FF3; 39 } 40 41 </style> 42 </head> 43 44 <body> 45 <div id="wai"> 46 <div class="li" onclick="show('cp')">產品中心</div> 47 <div class="liw" id="cp" style="display:none"> 48 <div class="li1">休閒</div> 49 <div class="li1">百貨</div> 50 </div> 51 <div class="li" onclick="show('dt')">最新動態</div> 52 <div class="liw" id="dt" style="display:none"> 53 <div class="li1">公司動態</div> 54 <div class="li1">業界新聞</div> 55 </div> 56 <div class="li">關於我們</div> 57 <div class="li">聯絡我們</div> 58 </div> 59 </body> 60 </html> 61 <script> 62 //單擊事件 63 function show(id){ 64 //獲取所有子選單到陣列,獲取當前元素 65 var s=document.getElementsByClassName("liw"); 66 var a=document.getElementById(id); 67 //判斷裡注意用== 68 //如果當前元素隱藏則顯示,否則隱藏 69 if(a.style.display=="none"){ 70 a.style.display="block"; 71 }else{ 72 a.style.display="none"; 73 } 74 } 75 </script>