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

由于浏览器的冒泡行为。造成如果在一个DIV元素上同时定义了mouseover,mouseout的时候,当鼠标移动到DIV中的child子元素的时候,就会同时执行了两个操作mouseover和mouseout。

解决方案:阻止冒泡行为,当执行mouseover的时候不触发mouseout的操作。

方法1:
延迟执行(setTimeout)、取消延迟(clearTimeout),就是当mouseout的时候延迟执行,而在mouseover的时候取消延迟执行。当鼠标在DIV上边移动的时候因为延迟的执行所以mouseout一直都不会被触发。

$(‘div‘).mouseout(function(){
     clearTimeout(t);
      t=setTimeout(zoomIn,400);
    }).mouseover(function(){
   if(t!=null)clearTimeout(t);
   t=null;
  }
);

  

方法2:jQuery(需要版本号大于1.2.2)
mouseenter和mouseleave事件IE特有的函数,使用jquery就很好的解决了兼容问题。函数的原理当第一次鼠标进入节点区域时触发,以后在节点区域内(子节点间)移动时不触发。

$(‘div‘).mouseout(function(){
     clearTimeout(t);
      t=setTimeout(zoomIn,400);
    }).mouseover(function(){
   if(t!=null)clearTimeout(t);
   t=null;
  }
);

  

jquery版本 >1.4简化写法:

$(‘div‘).mouseout(function(){
     clearTimeout(t);
      t=setTimeout(zoomIn,400);
    }).mouseover(function(){
   if(t!=null)clearTimeout(t);
   t=null;
  }
);

  

时间: 2024-08-15 17:07:17

jQuery因mouseover,mouseout冒泡产生的闪烁问题的相关文章

jQuery事件 mouseover方法与mouseout方法实现鼠标移进显示移出消失的效果 (css控制span标签)

<script> $(function(){ var text ; $(".pos span").each(function(){ text = $(this).text().trim(); if(text=="设为默认"){ $(this).css('display','none'); } }); $(".pos").mouseover(function(){ //鼠标移进显示效果 text = $(this).find('span

mouseover ,mouseout ,mouseenter,mouseleave的区别

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

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"

jQuery mouseove和mouseout事件不断触发

关于锋利的jQuery第三章结尾提示图片效果(鼠标放在图片上会出现一个大图跟随鼠标移动)实现时mouseove和mouseout事件不断触发的问题 html <ul class="box"> <li class="item"><img class="imgitem" src="./images/img (1).jpg" ></li> <li class="item

jQuery关于mouseover和mouseenter的区别

原生的mouseenter是dom3级的事件,对于jQuery等一些框架已经实现了这个事件.但是它到底跟mouseover有什么区别? jQuery在实现这两个事件的时候,mouseover支持事件冒泡,在父级注册事件,子元素也会触发此事件.而mouseenter只有鼠标划到注册事件的元素才会触发. 看个例子: <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js&

jQuery[补1] - 事件冒泡和阻止冒泡

假设网页上有两个元素,其中一个元素嵌套在另一个元素中,并且都被绑定了 click 事件,同时 body 元素上也绑定了 click 事件. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="conten

jQuery中的事件冒泡

1.什么是冒泡 eg: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>事件冒泡</title> <script src="

理解mouseover,mouseout,mouseenter,mouseleave

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