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>
时间: 2024-10-14 05:09:06

mouseover、mouseout和mouseenter、mouseleave的相关文章

mouseover ,mouseout ,mouseenter,mouseleave的区别

昨天写了个mouseover.mouseout 事件,发现频频闪动,研究半天,最后得出结论 mouseover/mouseout:鼠标经过该元素触发,经过其子元素再次触发 mouseenter/mouseleave:只触发一次,不论该元素有多少子元素 所以,使用该类型事件时,换成mouseenter/mouseleave

mouseover,mouseout,mouseenter,mouseleave的区别

相信做前端开发的都听说过“冒泡型事件”吧,<JavaScript高级程序设计>第九章有详细的讲述,但是,在学习的时候一知半解,也没详细去理解,导致最近在工作中碰到了问题:有许多 li 标签,标签上有2个按钮,当且仅当鼠标移入 li 时才会显示上面的2个按钮,如下图,左边是默认状态,右边是鼠标移入状态,开始使用的是 mouseover 和 mouseout ,结果鼠标移动到按钮上时,按钮会出现闪烁的情况.      后来对比了mouseover,mouseout,mouseenter,mouse

事件mouseover/out和mouseenter/leave

不论鼠标指针穿过被选元素或其子元素,都会触发mouseover事件.对应mouseout 只有在鼠标指针穿过被选元素时,才会触发mouseenter事件.对应mouseleave 对于mouseover和mouseenter两个事件,最大的区别就是mouseenter是不冒泡的事件.对于mouseover事件来说 当鼠标从其他元素移动到child节点时发生 但此事件会冒泡 所以会导致parent也触发mouseover.如果我们对parent注册了mouseover监听, 从parent移动到c

Jquery事件:鼠标移入移出(mouseenter,mouseleave)

前几天帮朋友做了一个单页面,其中有个效果就是鼠标移动到头像上变换头像样式,当鼠标移出时恢复头像样式.当时没多想,脑子就蹦出了mouseover,mouseout两个方法. 但是在编写页面的过程中,无论我怎么调试只有mouseover方法可以,mouseout方法失效. 于是就google,百度寻找解决答案,可是找了好久都没找到合适的答案.只好问问同事了,同事看了我的代码后也觉得没有问题,但是怎么测都失效. 往往在一条路上遇到问题后,通过各种方式都解决不了时,我们就要调整思路转换道路. 同事跟我说

jQuery因mouseover,mouseout冒泡产生的闪烁问题

由于浏览器的冒泡行为.造成如果在一个DIV元素上同时定义了mouseover,mouseout的时候,当鼠标移动到DIV中的child子元素的时候,就会同时执行了两个操作mouseover和mouseout. 解决方案:阻止冒泡行为,当执行mouseover的时候不触发mouseout的操作. 方法1:延迟执行(setTimeout).取消延迟(clearTimeout),就是当mouseout的时候延迟执行,而在mouseover的时候取消延迟执行.当鼠标在DIV上边移动的时候因为延迟的执行所

ie8下$(document).on(&#39;mouseover mouseout&#39;,&#39;ul li&#39;,function(){})的bug

$(document).on('mouseover mouseout','ul li',function(){ if (event.type == 'mouseover') {           console.log($(this));      }else if(event.type == 'mouseout'){           console.log($(this));      } }); 上述代码在IE8下会console多个结果,在代码末端添加return false可解决问

jQuery中 mouseover、mouseout、mouseenter、mouseleave的区别

不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件,与其相对应的是mouseout只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件,与其相对应的是mouseleave 一.以下这个例子能很好的帮助我们理解mouseover和mouseenter的区别: 1 <html> 2 <head> 3 <script type="text/javascript" src="/jquery/jquery.js"

mouseover、mouseout,mouseenter、mouseleave区别

心情压抑的一天,我想好好的. mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseout与mouseleave 不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件. 只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件. mouseover.mouseout事件冒泡

理解mouseover,mouseout,mouseenter,mouseleave

mouseover定义和用法 当鼠标指针位于元素上方时,会发生 mouseover 事件. 该事件大多数时候会与 mouseout 事件一起使用. mouseover() 方法触发 mouseover 事件,或规定当发生 mouseover 事件时运行的函数. 注释:与 mouseenter 事件不同,不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. ? 1 2 3 <div class="parent">父亲             <div