`
mr.a
  • 浏览: 95027 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]解决鼠标经过内部元素触发onmouseout事件的问题

    博客分类:
  • js
 
阅读更多

转自 http://sinian1120na.blog.163.com/blog/static/2458050820097151033950/

 

这个貌似没有太简洁的方法,  只有clearTimeout和if contains两种...

 

最近在做一个JS效果时,发现了这么个问题:

   当鼠标移入DIV内部的Img或其它元素上时,内部元素的mouseover事件被触发。但是再次将鼠标移动到DIV内部的另一个内部元素时,

   却会发现首先被触发的是DIV的mouseout事件,紧接着才是当前这个元素的mouseover事件。

 

   在网上百度查找到了一些资料,现在做下总结:

 

   方法一: 通过设置Settimeout

  

    当鼠标触发外层的mouseout事件时,开始计时Settimeout,一段时间后再去执行mouseout需要执行的函数;这段时间是为了判断鼠标是否移动到了其内部元素。

 当鼠标mouseover到了内部元素上时,这时候会触发它本身以及外层的mouseover事件,这时在事件中使用clearTimeout来消除之前定时的out后要执行的函数。

 

 例:

 var timeId;  // 全局变量 用来计时

 function mouseOver()

 {

  cleartimeout(timeId); // 当触发onmouseover事件时,先清除鼠标移出事件的函数。

  ... //后去处理触发mouseover事件要执行的函数

 }

 

 function mouseout()

 {

  timeId = setTimeout("outMethod()",100);  //先将mouseout要执行的函数延时执行。这段时间是为了判断鼠标是否移动到了其内部元素。

 }

 

 

   方法二: 通过Contains

   通过Contains判断鼠标OUT的时候,是否OUT到了它的内部元素上,也就是说,要判断鼠标OUT的时候移动到的元素是不是属于这个元素的内部元素。

   

   比如在触发事件后本是要这么执行函数:

   function mouseout()

   {

   outMethod();

   }

 

   现因为需要在执行函数前,先去判断在这个事件中鼠标移动到的元素是否是包含在它本身当中,不属于时才执行后面函数:

   function mouseout()

   {

  if(!this.contains(event.toElement))

  {

   outMethod();

  }

   }

 

   但是这个contains只有IE支持,为了让非IE支持就有了下面这段代码,增加了这么个contains函数:

   if(typeof(HTMLElement)!="undefined"){   

       HTMLElement.prototype.contains    =    function(obj) {   

           while(obj!=null    &&    typeof(obj.tagName)!="undefind"){

     if(obj==this)    

     return    true;    

     obj=obj.parentNode;

     }    

     return    false;   

       };   

   }

   其实就是不停的找鼠标移动到的元素的父元素,看这个父元素是不是就是鼠标原来呆的地方。

   如果这个元素他爹或他爷爷就是这个鼠标刚开始OUT出来的元素,那么这个元素肯定就是鼠标OUT出来的元素的内部元素。 

分享到:
评论

相关推荐

    js 阻止子元素响应父元素的onmouseout事件具体实现

    但在一些场景下,我们需要在鼠标从子元素移出到父元素时不触发父元素的onmouseout事件,以避免不必要的响应。 在文档中提到的场景,就是要实现阻止子元素的onmouseout事件触发父元素的onmouseout事件。具体实现方法...

    js下关于onmouseout、事件冒泡的问题经验小结

    问题是这样的:一个div元素要触发onmouseout事件,同时这个div内部还有子元素,于是当鼠标移动到该div的子元素上时,onmouseout事件也被触发了。在要做浮动层效果的时候会经常遇到这个问题。 解决方法一: 使用...

    js下关于onmouseout、事件冒泡的问题经验小结.docx

    例如,在上述示例中,即使鼠标只是从父元素移动到了子元素,也会因为事件冒泡而触发 `onmouseout` 事件。这通常不是我们所期望的行为。 ##### 如何阻止事件冒泡 在 JavaScript 中,可以通过调用事件对象的 `...

    html鼠标事件整理

    8. **onmousedown** 事件:当鼠标按键被按下时触发,不论是在元素内部还是外部。这个事件可用于拖放操作的初始化或开始。 9. **onmousemove** 事件:当鼠标指针在页面上移动时不断触发。这个事件常用于实现鼠标的...

    js事件大全汇总111

    - 描述:当鼠标光标在一个元素内部移动时触发此事件。 7. **`onMouseOut`**:当鼠标离开一个元素时触发。 - 支持版本:IE4 | Netscape3 | Opera3 - 描述:当鼠标光标移出元素边界时触发此事件。 #### 三、键盘...

    javascript事件列表解说

    - `onmousemove`:当鼠标在元素内部移动时触发。 - `onmouseout`:当鼠标指针离开元素范围时触发。 2. **键盘事件**: - `onkeypress`:在键盘按键被按下并释放时触发。 - `onkeydown`:当键盘按键被按下时触发...

    javascript中onmouse事件在div中失效问题的解决方法

    自定义解决策略的核心在于判断触发onmouseout事件后,鼠标是否真的离开了div元素。文章通过获取触发onmouseout事件的元素,利用event对象的toElement属性(IE)和relatedTarget属性(Firefox)来判断。接下来,文章...

    js判断鼠标位置是否在某个div中的方法

    为了解决这个问题,我们可以在触发onmouseout事件前先判断鼠标是否真的离开了div,即通过计算鼠标位置与div的位置关系来确定。 具体实现方法是,首先通过`document.getElementById`方法获取到想要判断的div元素。...

    javascript 不让鼠标事件触发

    综上所述,要防止鼠标事件触发div上加了onclick事件时,点击内部超链接不触发div的事件,需要在a标签的事件处理函数中使用`event.stopPropagation()`来阻止事件冒泡,并使用`event.preventDefault()`阻止超链接默认...

    JavaScript常用事件

    8. `onmousedown`、`onmousemove`、`onmouseout`、`onmouseover`和`onmouseup`事件:这些是鼠标事件,分别对应于鼠标按键按下、鼠标移动、鼠标离开元素、鼠标移到元素上和鼠标按键释放。它们在创建交互式图形或拖放...

    CSS鼠标响应事件经过、移动、点击示例介绍

    5. `onMouseMove`:当鼠标在元素内部移动时持续触发。此事件可用于追踪鼠标的位置,例如在画布上绘制或实现悬停提示。 以下是一个简单的HTML和CSS示例,展示了如何利用这些事件改变元素的背景颜色: ```html <!...

    js事件模型

    - onmouseout:鼠标离开元素区域 2. 键盘事件: - onkeypress:键盘按键被按下并释放 - onkeydown:键盘按键被按下 - onkeyup:键盘按键被释放 3. 页面相关事件: - onabort:图片加载中断 - onbeforeunload...

    js活用事件触发对象动作

    此外,由于事件冒泡机制,子元素触发的事件会被父元素捕获,因此可以利用这一特性来简化代码。 事件触发对象动作的技巧在实际开发中非常实用,特别是在大型项目中,可以避免大量重复的事件绑定代码,提高性能。学习...

    javascript事件汇总

    - **触发时机**:当Marquee元素内部的内容移动到显示范围之外时触发。 - **应用场景**:实现动态滚动效果。 2. **`onfinish`**: - **触发时机**:当Marquee元素完成一次滚动循环时触发。 - **应用场景**:控制...

    第11章JAVASCRIPT事件和浏览器[参考].pdf

    9. **onmouseover 和 onmouseout 事件**:当鼠标指针进入或离开元素时触发,常用于创建提示信息或改变元素样式。 10. **onmousedown、onmouseup及onclick事件**:鼠标按钮按下(`onmousedown`)、释放(`onmouseup`)和...

    htmld的事件列表

    当鼠标指针离开该元素时触发**onMouseOut**事件。 - 示例代码:`<p onmouseover="this.style.color='red'" onmouseout="this.style.color='black'">鼠标经过我</p>` 5. **onMouseMove**: 在用户的鼠标指针在元素...

    关于svg事件及缩放

    通常情况下,事件的触发顺序遵循从内到外的原则,即内部元素的事件先于外部元素的事件触发。 #### 二、SVG的缩放控制 SVG的缩放功能对于创建动态和交互式的图表非常重要。在文档中提到了通过修改`viewBox`属性来...

    JavaScript中的大事托付及好处_.docx

    在事件处理函数内部,我们通过`event`对象获取当前事件的目标元素(即触发事件的元素),然后检查这个元素是否是我们关心的`li`元素。如果是,我们就改变它的背景色。这样,无论是原有的`li`还是后来动态添加的`li`...

Global site tag (gtag.js) - Google Analytics