zoukankan      html  css  js  c++  java
  • jQuery里的mouseover与mouseenter事件类型区别

    JQ里面有mouseover和mouseenter  2个事件类型干着差不多的活,用不好经常出现些小问题。

    今天我解释一下原理:

    事件类型翻译:
    
    mouseover     鼠标移上
    
    mouseenter    鼠标移进 


    jQuery的 mouseover 绝对等于原生js的 onmouseover,但使用起来是往往会有些问题。

    原生js没有 onmouseenter 的事件类型,jQuery内部给它封装了新的事件类型也就是 mouseenter 来解决这个问题。

     ( 对应还有鼠标离开 onmouseout和mouseleave同理 )

    线上demo:  http://jsbin.com/gihaya/1/

    <!DOCTYPE html>
    <html>
    <head>
      <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
      <meta charset="utf-8">
      <title>mouseover和mouseenter区别</title>
      <style>
      .over-and-enter div{background:#ccc;padding:20px;width:30%;float:left;margin: 0 10px;}
      .over-and-enter h2{background: #fff;}
      </style>
      <script type="text/javascript">
      var x=0;
      var y=0;
      $(function(){
          $('.over').mouseover(function(){
              $('.over span').html( x+=1 );
          });
          $('.enter').mouseenter(function(){
              $('.enter span').html( y+=1 );
          });
      });
      </script>
    </head>
    <body>
    <div class="over-and-enter">
        <p>不论鼠标<b>移上被选元素或其子元素</b>,都会触发 mouseover 事件。</p>
        <p>鼠标移进被选元素,不管在其内部如何移动,<b>只触发一次</b> mouseenter 事件。</p>
        <div class="over">
        <h2>被触发的 mouseover 事件:<span></span></h2>
        </div>
        <div class="enter">
        <h2>被触发的 mouseenter 事件:<span></span></h2>
        </div>
    </div>
    </body>
    </html>

    工作中可能遇到的bug。

    线上demo: http://jsbin.com/lacepe/1/

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>mouseenter和mouseleave</title>
        <style>
        .father{width:100%;height:200px;background: #ccc;border: 1px solid #000;display: none;cursor: pointer;}
        .children{width: 95%;height:150px;background: #eee;margin: 10px auto;cursor: pointer;}
        </style>
        <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
        <script>
        $(function(){
            // js原生事件有onmouseover和onmouseout,功能是绝对等于jQ的mouseover和mouseout
            $('button').mouseover(function(){
                $('.father').show();
            });
            // jQuery封装了2个新的事件,mouseenter和mouseleave来检测移进/出被选元素的次数
            $('.father').mouseout(function(){
                $('.father').hide();
            });
            // demo的bug把mouseout事件类型换成mouseleave即可。
    
            // 总结:
            // 我们jquery 里面 不太用  mouseover      mouseout 
            // 而我们喜欢用            mouseenter     mouseleave
        })
        </script>
    </head>
    <body>
        <button>鼠标过来</button>
        <div class="father">
            我是下拉菜单,<b>离开我的范围我才隐藏起来</b><div class="children">我可能是下拉菜单的内容,<b>移到我这里看看。</b></div>
        </div>
    </body>
    </html>

    解决办法:demo的bug把mouseout事件类型换成mouseleave即可。

    总结:

    我们jquery 里面 不太用   mouseover             mouseout

    而我们喜欢用                    mouseenter            mouseleave

  • 相关阅读:
    苹果新的编程语言 Swift 语言进阶(五)--控制流
    苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型
    苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算
    苹果新的编程语言 Swift 语言进阶(二)--基本类型
    第一篇 android架构是如何满足设计目标的?
    第三篇 android 应用开发模式之MVC模式及Observer模式
    第二篇 android应用开发模式之模板模式
    为什么带网格(mesh)的模型添加了刚体Rigidbody和MeshCollider,还是会从地板穿过去?
    Mecanim动画模型规范
    HTC Vive 体验的折腾经历
  • 原文地址:https://www.cnblogs.com/Megasu/p/4543688.html
Copyright © 2011-2022 走看看