解决HTML内部元素的Mouse事件干扰
话说有一个DIV元素,其内部有一个IMG元素和SPAN元素,不用理会这两个内部元素怎么布局,这不是我要讨论的重点。
为了实现一些特殊的效果,我需要利用TD的onmouseover和onmouseout事件,测试时就会发现如下的状况:
当鼠标移入DIV内部时,onmouseover事件被触发;接着再鼠标移动到DIV内部的IMG或者SPAN元素之上,我们肯定不会认为这时鼠标已经移到了DIV的外边,但奇怪的是onmouseout事件触发了,而且紧接着onmouseover事件也马上被触发了。
这可不是我想要的,那么怎么屏蔽内部元素给外层元素带来的Javascript事件干扰呢?
这里列举两种方法:
一. setTimeout
因为在鼠标移动到内部元素之上而触发了外层元素的onmouseout事件后,外层元素的onmouseover也会马上触发,所以我们只需要把外层元素的onmouseout事件需要执行的动作延迟很短的一段时间来运行,然后在onmouseover事件中再执行clearTimeout方法,这样就可以避免内部元素引起的事件干扰。
具体的执行过程请看下图(纵向的虚线表示时间):
这是个很巧妙的的方法,因为当onmouseout触发后,实质性的方法并没有马上执行,而是要等待一小段时间。如果在这段时间里马上又触发了 onmouseover事件,那么基本上就可以肯定onmouseout事件的触发是因为内部元素的干扰了,所以在onmouseover事件中使用 clearTimeout来阻止延时的方法执行。
二.contains
在onmouseover时先进行如下判断,结果为true时再执行方法体:
if(!this.contains(event.fromElement)){MouseOverFunc()}
在onmouseout时先进行如下判断,结果为true时再执行方法体:
if(!this.contains(event.toElement)){MouseOutFunc()}
下面来解释一下上面两行代码的含义:
在IE中,所有的HTML元素都有一个contains方法,它的作用是判断当前元素内部是否包含指定的元素。我们利用这个方法来判断外层元素的事件是不是因为内部元素而被触发,如果内部元素导致了不需要的事件被触发,那我们就忽略这个事件。
event.fromElement指向触发onmouseover和onmouseout事件时鼠标离开的元素;event.toElement指向触发onmouseover和onmouseout事件时鼠标进入的元素。
那么上面两行代码的含义就分别是:
○ 当触发onmouseover事件时,判断鼠标离开的元素是否是当前元素的内部元素,如果是,忽略此事件;
○ 当触发onmouseout事件时,判断鼠标进入的元素是否是当前元素的内部元素,如果是,忽略此事件;
这样,内部元素就不会干扰外层元素的onmouseover和onmouseout事件了。
但问题又来了,非IE的浏览器并不支持contains函数,不过既然我们已经知道了contains函数的作用,就可以自行添加如下的代码来为非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;
};
}
- 大小: 29.7 KB
分享到:
相关推荐
在JavaScript中,`onmouseover`和`onmouseout`事件是两个非常常见的用于处理用户交互的事件。它们主要用于响应用户将鼠标指针移到元素上方或移出元素时的行为。这两个事件在网页动态效果和用户界面交互设计中扮演着...
在网页设计中,`onmouseover` 和 `onmouseout` 是两个非常重要的JavaScript事件,它们用于实现用户交互功能,特别是创建动态效果和提供额外信息。在这个特定的案例中,这两个事件被用来控制一个div元素,使其根据...
在本篇文章中,我们将探讨如何使用CSS和JavaScript来实现兼容IE和Firefox的鼠标经过效果(onmouseover和onmouseout)。在前端开发中,鼠标经过效果是一个非常常用的交互效果,然而不同的浏览器对其支持的方式不同,...
JavaScript 是一种广泛用于网页和网络应用的脚本语言,它在网页交互中扮演着重要角色,其中事件处理是其核心功能之一。事件是用户或浏览器对页面进行操作时触发的特定情况,例如点击按钮、滚动页面等。本文将详细...
JS事件触发大全是指在 JavaScript 中各种事件的触发机制,这些事件可以在不同的元素上触发,例如按钮、链接、文本框、图片等。这些事件可以被 JavaScript 代码捕捉和处理,以便执行特定的操作。 事件类型 1. 鼠标...
本篇文章将探讨如何实现一个简短的兼容IE和Firefox的鼠标经过事件(onmouseover和onmouseout)的解决方案。 首先,让我们了解这两个事件。`onmouseover`事件在鼠标指针进入一个元素时触发,而`onmouseout`事件则在...
- IE6并不支持CSS3,所以实现模糊效果可能需要用到像CSS Expression或者JavaScript的onMouseOver/onMouseOut事件来动态修改图片的样式。 3. onMouseOver与onMouseOut事件: - `onMouseOver`事件在鼠标指针进入...
为实现跨浏览器兼容的解决方案,可以使用`onmouseover`和`onmouseout`,并通过检查事件的`relatedTarget`或IE特有属性`fromElement`和`toElement`来模拟`onmouseenter`和`onmouseleave`的行为。下面的示例代码展示了...
在Xiney ImagePreview项目中,可能包含了一个实现以上功能的JS库,包括预加载图片、处理事件和兼容旧版IE的代码。使用时,只需引入该库,并按照文档说明配置即可。通过分析这个库的源代码,我们可以学习到更多关于跨...
这种方法通过自定义 `mouseleave` 事件处理器来解决 `onmouseout` 事件过度触发的问题。其核心思想是在 `onmouseout` 事件触发时检查目标元素与鼠标移入的新元素之间的关系,只有当鼠标移入的元素不是目标元素的后代...
下面是JavaScript触发事件列表,涵盖了常见的事件类型和应用场景: 单击事件(OnClick) 单击事件是用户单击鼠标按键时产生的事件,同时onclick指定的事件处理程序或代码将被调用执行。例如:打开页面" onclick=...
其中,`onmouseout` 事件和事件冒泡机制尤为关键,它们涉及到用户交互以及页面元素间的响应逻辑。本文将围绕这两个主题进行深入探讨,并提供具体的解决方案。 #### 二、`onmouseout` 事件概述 `onmouseout` 是一个...
### JavaScript 解决 IE6 下 hover 问题的方法 #### 背景介绍 Internet Explorer 6 (简称 IE6) 是微软发布的一款浏览器,在早期互联网时代占据了非常重要的地位。然而,随着 Web 技术的发展,IE6 的很多功能已经...
`onmouseover`事件在鼠标指针移入元素范围时触发,`onmouseout`事件在鼠标指针移出元素范围时触发。 ```html 鼠标悬停" onmouseover="window.status='';return true"> ``` #### 6. ondbclick, onkeypress, ...
### JavaScript 触发事件列表详解 #### 一、单击事件(onclick) 当用户单击鼠标按键时触发的事件。通常,在HTML元素上定义`onclick`属性,该属性指定一个事件处理程序或一段代码,当点击事件发生时,这段代码将会被...
9. 鼠标离开事件(onmouseout):当鼠标移出元素时触发,常用于消除之前onmouseover设置的效果。 10. 其他鼠标事件: - 鼠标双击事件(ondblclick) - 鼠标按下事件(onmousedown) - 鼠标释放事件(onmouseup)...
鼠标触发的事件,JS脚本 鼠标事件是指在 Web 浏览器中,用户通过鼠标交互引发的事件。这些事件可以被 JavaScript 捕获和处理,以实现各种交互效果。下面是常见的鼠标事件: 1. onClick:鼠标点击事件,多用在某个...