zoukankan      html  css  js  c++  java
  • mouseover、mouseout和mouseenter、mouseleave

    这里直接把《Javascript 高级程序设计(第三版)》中的解释贴出来:

    1. mouseover:在鼠标指针位于一个元素外部,然后用户将其首次移入另一个元素边界之内时触发。不能通过键盘触发这个事件。
    2. mouseout:在鼠标指针位于一个元素上方,然后用户将其移入另一个元素时触发。又移入的另一个元素可能位于前一个元素的外部,也可能是这个元素的子元素。不能通过键盘触发这个事件。
    3. mouseenter:在鼠标光标从元素外部首次移动到元素范围之内时触发。这个事件不冒泡,而且在光标移动到后代元素上时不会触发。
    4. mouseleave:在位于元素上方的鼠标光标移动到元素范围之外时触发。这个事件不冒泡,而且在光标移动到后代元素上时不会触发。

    由于mouseover和mouseout事件会冒泡,所以如果为一个元素添加了这两个事件,那么在该元素的后代元素上切换时会重复触发该元素的这两个事件(在项目中要注意)。如果在后代元素上阻止事件冒泡,那么鼠标指针移到后代元素上,相当于触发了该元素(祖先元素)的mouseout事件。

    而mouseenter和mouseleave没有此行为。

    注意:IE8及以下版本不支持DOM2级添加事件的方法。

    例子:点我看在线演示(在控制台中查看)

    <style type="text/css">
       html,body{
          height:100%;
       }
       body{
          padding:100px;
       }
       div{
          margin:auto;
       }
       #div1,#div4{
          width:400px;
          height:300px;
          background-color: red;
       }
       #div4{
          margin-top: 50px;
          background-color: #2a3e5d;
       }
       #div2,#div5{
          width:300px;
          height:250px;
          background-color: black;
       }
       #div3,#div6{
          width:200px;
          height:150px;
          background-color: gold;
       }
    </style>
    
    <div id="div1">
       <div id="div2">
          <div id="div3"></div>
       </div>
       div1
    </div>
    <div id="div4">
       <div id="div5">
          <div id="div6"></div>
       </div>
       div4
    </div>
    <script type="text/javascript" >
    (function(){
       function get(id){
          return document.getElementById(id);
       }
       var div1 = get('div1'), div2 = get('div2'), div3 = get('div3');
       div1.count = 0;
       div1.addEventListener('mouseenter', function() {
          this.style.backgroundColor = "pink";
          div1.count++;
          console.log('div1.count: '+div1.count);
       }, false);
       div1.addEventListener('mouseleave', function() {
          this.style.backgroundColor = "green";
          div1.count--;
          console.log('div1.count: '+div1.count);
       }, false);
       
       var div4 = get('div4'), div5 = get('div5'), div6 = get('div6');
       div4.count = 0;
       div4.addEventListener('mouseover', function() {
          this.style.backgroundColor = "blue";
          div4.count++;
          console.log('div4.count: '+div4.count);
       }, false);
       div4.addEventListener('mouseout', function() {
          this.style.backgroundColor = "gray";
          div4.count--;
          console.log('div4.count: '+div4.count);
       }, false);
    })();
    </script>
  • 相关阅读:
    NetCore指令集和
    在WPF中的Canvas上实现控件的拖动、缩放
    WPF 窗体中的 Canvas 限定范围拖动 鼠标滚轴改变大小
    利用百度API(js),怎样通过地址获取经纬度
    讨论一下hibernate如何动态注册一个动态生成的实体类
    大端序vs小端序
    influxdb+telegraf+grafana实现nginx监控
    python库pillow:实现生成图片并加水印
    mac使用之设置vim colors
    学习python库:elasticsearch-dsl
  • 原文地址:https://www.cnblogs.com/fogwind/p/6361494.html
Copyright © 2011-2022 走看看