• 菜单导航兼容和不兼容捕获方法


    【一】兼容性写法

    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>
  • 相关阅读:
    Hibernate之lazy延迟加载(转)
    Hibernate中的一级缓存、二级缓存和懒加载(转)
    Hibernate框架之关联映射入门
    Hibernate框架之入门
    S​Q​L​获​取​当​前​时​间​(​日​期​)
    网页选项卡的应用
    动态获取设置提示框和小箭头的位置
    Jquery实现下拉联动表单
    jquery自己手写表单验证
    鼠标移动到图片上时,显示大图片
  • 原文地址:https://www.cnblogs.com/oklfx/p/7499617.html
Copyright © 2020-2023  润新知