转自 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出来的元素的内部元素。
相关推荐
但在一些场景下,我们需要在鼠标从子元素移出到父元素时不触发父元素的onmouseout事件,以避免不必要的响应。 在文档中提到的场景,就是要实现阻止子元素的onmouseout事件触发父元素的onmouseout事件。具体实现方法...
问题是这样的:一个div元素要触发onmouseout事件,同时这个div内部还有子元素,于是当鼠标移动到该div的子元素上时,onmouseout事件也被触发了。在要做浮动层效果的时候会经常遇到这个问题。 解决方法一: 使用...
例如,在上述示例中,即使鼠标只是从父元素移动到了子元素,也会因为事件冒泡而触发 `onmouseout` 事件。这通常不是我们所期望的行为。 ##### 如何阻止事件冒泡 在 JavaScript 中,可以通过调用事件对象的 `...
8. **onmousedown** 事件:当鼠标按键被按下时触发,不论是在元素内部还是外部。这个事件可用于拖放操作的初始化或开始。 9. **onmousemove** 事件:当鼠标指针在页面上移动时不断触发。这个事件常用于实现鼠标的...
- 描述:当鼠标光标在一个元素内部移动时触发此事件。 7. **`onMouseOut`**:当鼠标离开一个元素时触发。 - 支持版本:IE4 | Netscape3 | Opera3 - 描述:当鼠标光标移出元素边界时触发此事件。 #### 三、键盘...
- `onmousemove`:当鼠标在元素内部移动时触发。 - `onmouseout`:当鼠标指针离开元素范围时触发。 2. **键盘事件**: - `onkeypress`:在键盘按键被按下并释放时触发。 - `onkeydown`:当键盘按键被按下时触发...
自定义解决策略的核心在于判断触发onmouseout事件后,鼠标是否真的离开了div元素。文章通过获取触发onmouseout事件的元素,利用event对象的toElement属性(IE)和relatedTarget属性(Firefox)来判断。接下来,文章...
为了解决这个问题,我们可以在触发onmouseout事件前先判断鼠标是否真的离开了div,即通过计算鼠标位置与div的位置关系来确定。 具体实现方法是,首先通过`document.getElementById`方法获取到想要判断的div元素。...
综上所述,要防止鼠标事件触发div上加了onclick事件时,点击内部超链接不触发div的事件,需要在a标签的事件处理函数中使用`event.stopPropagation()`来阻止事件冒泡,并使用`event.preventDefault()`阻止超链接默认...
8. `onmousedown`、`onmousemove`、`onmouseout`、`onmouseover`和`onmouseup`事件:这些是鼠标事件,分别对应于鼠标按键按下、鼠标移动、鼠标离开元素、鼠标移到元素上和鼠标按键释放。它们在创建交互式图形或拖放...
5. `onMouseMove`:当鼠标在元素内部移动时持续触发。此事件可用于追踪鼠标的位置,例如在画布上绘制或实现悬停提示。 以下是一个简单的HTML和CSS示例,展示了如何利用这些事件改变元素的背景颜色: ```html <!...
- onmouseout:鼠标离开元素区域 2. 键盘事件: - onkeypress:键盘按键被按下并释放 - onkeydown:键盘按键被按下 - onkeyup:键盘按键被释放 3. 页面相关事件: - onabort:图片加载中断 - onbeforeunload...
此外,由于事件冒泡机制,子元素触发的事件会被父元素捕获,因此可以利用这一特性来简化代码。 事件触发对象动作的技巧在实际开发中非常实用,特别是在大型项目中,可以避免大量重复的事件绑定代码,提高性能。学习...
- **触发时机**:当Marquee元素内部的内容移动到显示范围之外时触发。 - **应用场景**:实现动态滚动效果。 2. **`onfinish`**: - **触发时机**:当Marquee元素完成一次滚动循环时触发。 - **应用场景**:控制...
9. **onmouseover 和 onmouseout 事件**:当鼠标指针进入或离开元素时触发,常用于创建提示信息或改变元素样式。 10. **onmousedown、onmouseup及onclick事件**:鼠标按钮按下(`onmousedown`)、释放(`onmouseup`)和...
当鼠标指针离开该元素时触发**onMouseOut**事件。 - 示例代码:`<p onmouseover="this.style.color='red'" onmouseout="this.style.color='black'">鼠标经过我</p>` 5. **onMouseMove**: 在用户的鼠标指针在元素...
通常情况下,事件的触发顺序遵循从内到外的原则,即内部元素的事件先于外部元素的事件触发。 #### 二、SVG的缩放控制 SVG的缩放功能对于创建动态和交互式的图表非常重要。在文档中提到了通过修改`viewBox`属性来...
在事件处理函数内部,我们通过`event`对象获取当前事件的目标元素(即触发事件的元素),然后检查这个元素是否是我们关心的`li`元素。如果是,我们就改变它的背景色。这样,无论是原有的`li`还是后来动态添加的`li`...