菜单导航兼容和不兼容捕获方法
Posted ︶ㄣ鳯躌氷瀚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜单导航兼容和不兼容捕获方法相关的知识,希望对你有一定的参考价值。
【一】兼容性写法
relatedTarget
1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title></title> 7 8 <style> 9 * { 10 margin: 0px; 11 padding: 0px; 12 list-style: none; 13 } 14 15 nav { 16 position: relative; 17 } 18 19 section { 20 position: absolute; 21 left: 0px; 22 right: 0px; 23 height: 20px; 24 overflow: hidden; 25 background: blue; 26 transition: 1s; 27 } 28 29 .sub { 30 height: 120px; 31 } 32 33 ul { 34 width: 1000px; 35 height: 88px; 36 margin: auto; 37 } 38 39 nav ul li { 40 height: 66px; 41 float: left; 42 border: 1px solid red; 43 padding: 10px; 44 } 45 </style> 46 </head> 47 48 <body> 49 <!-- 50 鼠标在导航区域,子导航总是弹出 51 鼠标事件: 52 移入溢出 53 relatedTarget 54 55 当鼠标溢出:到子导航或子导航的子元素上,不应该隐藏子导航 56 57 判断一个元素,是不是section, 58 或者是不是section的子导航 59 60 parentNode 向上找。 61 ChildNodes 向下找。 62 性能都不高... 63 64 捕获想法,可行。 65 --> 66 <nav> 67 <ul id="box"> 68 <li><span>小米</span></li> 69 <li><span>红米</span></li> 70 <li><span>平板 · 笔记本</span></li> 71 <li><span>电视</span></li> 72 <li><span>盒子 · 影音</span></li> 73 <li><span>路由器</span></li> 74 <li><span>智能硬件</span></li> 75 <li><span>服务</span></li> 76 <li><span>社区</span></li> 77 </ul> 78 79 <section id="subnav"> 80 子导航 81 <b>99</b> 82 <div id="test"> 83 <b>99</b> 84 </div> 85 </section> 86 87 </nav> 88 89 <script> 90 var lis = document.querySelectorAll("li") 91 var subnav = document.querySelector("#subnav"); 92 var test = document.querySelector("#test"); 93 for(var i = 0; i < lis.length; i++) { 94 lis[i].onmouseenter = function() { 95 subnav.className = "sub" 96 subnav.innerHTML = this.innerHTML; 97 } 98 lis[i].onmouseleave = function(ev) { 99 100 var obj = ev.relatedTarget; 101 console.log(obj); 102 if(obj.id == "subnav") { 103 console.log("这就是子导航"); 104 } else if(!isChild(subnav, obj)) { 105 subnav.className = "" 106 } 107 108 } 109 } 110 111 subnav.onmouseleave = function() { 112 this.className = "" 113 } 114 115 //判断一个元素是否是另外一个元素的子元素。最佳方案 116 function isChild(p, s) { 117 while(s.tagName != "BODY") { 118 if(s.parentNode == p) { 119 return 1; 120 } 121 //向上去一层 122 s = s.parentNode; 123 } 124 return 0; 125 } 126 127 console.log(isChild(subnav, test)) 128 </script> 129 </body> 130 131 </html>
【二】不兼容性写法
addEventListener
1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title></title> 7 8 <style> 9 * { 10 margin: 0px; 11 padding: 0px; 12 list-style: none; 13 } 14 15 nav { 16 position: relative; 17 } 18 19 section { 20 position: absolute; 21 left: 0px; 22 right: 0px; 23 height: 20px; 24 overflow: hidden; 25 background: blue; 26 transition: 1s; 27 } 28 29 .sub { 30 height: 120px; 31 } 32 33 ul { 34 width: 1000px; 35 height: 88px; 36 margin: auto; 37 } 38 39 nav ul li { 40 height: 66px; 41 float: left; 42 border: 1px solid red; 43 padding: 10px; 44 } 45 </style> 46 </head> 47 48 <body> 49 <!-- 50 鼠标在导航区域,子导航总是弹出 51 鼠标事件: 52 移入溢出 53 relatedTarget 54 55 当鼠标溢出:到子导航或子导航的子元素上,不应该隐藏子导航 56 57 判断一个元素,是不是section, 58 或者是不是section的子导航 59 60 parentNode 向上找。 61 ChildNodes 向下找。 62 性能都不高... 63 64 捕获想法,可行。 65 --> 66 <nav> 67 <ul id="box"> 68 <li><span>小米</span></li> 69 <li><span>红米</span></li> 70 <li><span>平板 · 笔记本</span></li> 71 <li><span>电视</span></li> 72 <li><span>盒子 · 影音</span></li> 73 <li><span>路由器</span></li> 74 <li><span>智能硬件</span></li> 75 <li><span>服务</span></li> 76 <li><span>社区</span></li> 77 </ul> 78 79 <section id="subnav"> 80 子导航 81 <b>99</b> 82 <div id="test"> 83 <b>99</b> 84 </div> 85 </section> 86 87 </nav> 88 89 <script> 90 var lis = document.querySelectorAll("li") 91 var subnav = document.querySelector("#subnav"); 92 var test = document.querySelector("#test"); 93 for(var i = 0; i < lis.length; i++) { 94 lis[i].onmouseenter = function() { 95 subnav.className = "sub" 96 subnav.innerHTML = this.innerHTML; 97 } 98 99 lis[i].onmouseleave = function(ev) { 100 subnav.className = "" 101 subnav.addEventListener("mouseenter", function() { 102 subnav.className = "sub" 103 }, true) 104 } 105 } 106 subnav.onmouseleave = function() { 107 this.className = "" 108 } 109 </script> 110 </body> 111 112 </html>
以上是关于菜单导航兼容和不兼容捕获方法的主要内容,如果未能解决你的问题,请参考以下文章
scikit klearn 中的 FeatureUnion 和不兼容的行维度