dunhuangmi的话:记得还是生手时面过某知名公司,题目之一是两个嵌套div,鼠标走对角线经过父与子时究竟会触发几个mouseover和mouseout事件?我当时答错了
,下面这篇文章解释了这个问题。
===================================================================
描述
:
javascript的mouseover和mouseout事件,在绑定元素内部有子元素的情况下,
经过绑定元素时会多次触发mouseover和mouseout事件。
原因
:
当鼠标经过或离开子元素的时候,浏览器认为这样也触发了mouseover和mouseout事件
解决办法:
:
原生javascript:
(修改自jquery)
var handler = document.getElementById("test2");
handler.onmouseover = function(e){
if(checkFather(this,e)){
console.debug("over");
}
}
handler.onmouseout = function(e){
if(checkFather(this,e)){
console.debug("out");
}
}
function checkFather(that,e){
var parent = e.relatedTarget;
try {
while ( parent && parent !== that ) {
parent = parent.parentNode;
}
return (parent !== that);
} catch(e) { }
}
原理是判断离开的元素(mouseover时)或者进入的元素(mouseout进入的元素)是不是事件绑定对象本身或者子元素
jquery解决办法:
jquery的mouseenter和mouseleave方法已经修复了这个问题,可以直接用来替代mouseover和mouseout
不过有个mouseenter和mouseleave有个小问题是,让鼠标从文档外直接进入绑定事件的元素时,mouseenter不生效
暂时解决办法是,别让绑定事件的元素靠浏览器边缘,尽量留出至少1px间距。
另外,jquery的hover()方法,相当于使用了mouseenter和mouseleave。也能解决mouseover和mouseout的问题。
来自:http://www.zhangsuoyong.com/?p=111
先了解一下鼠标移动流程,鼠标放上去onmouseover下拉菜单出现,移开onmouseout则消失,从父元素到子元素流程事件触发流程应该是这样的:父onmouseover=>父onmouseout=>子onmouseover...
在
这个过程中有个javascript冒泡的问题,当从父元素移动到子元素的时候,会冒泡到父元素从而触发父元素的onmouseout事件,虽然从界面上
看鼠标并没有移出父元素。所以我们不要冒泡到父元素就行了。纯js的做法就是判断当前元素是否是子元素,是的话,就不冒泡到父元素。
你这里用到
了
jQuery的slideDown,使用mouseout时,鼠标只要在容器里一移动,就被触发了hide(),其实是因为mouseout事件也会影响
到子元素,也就是事件可能被同时绑定到了该容器的子元素上,所以鼠标移出每个子元素也都会触发我们的hide()。
jquery1.3版本还有个函数mouseleave,把mouseout换为mouseleave就解决了这个问题。
分享到:
相关推荐
通常,hover事件结合了mouseover和mouseout两个动作。然而,在旧版本的Internet Explorer(IE)浏览器中,使用hover事件时可能会遇到一个问题,即鼠标快速移动到触发下拉菜单时,菜单项会不停闪烁。这通常是由于...
1.增加建筑物高亮显示(还需完成鼠标mouseover和mouseout事件) 2009-8-18 1.完成建筑物高亮显示,有点小bug 2009-8-19 1.增加记录原始缩放比例的全局变量 2.解决建筑物高亮显示bug 2009-8-20 1.增加三维全景展示...
除了click之外,还有诸多其他事件,如mouseover、mouseout、keydown等,大大简化了跨浏览器的事件处理。 动画效果是jQuery吸引人的特点。`fadeIn()`、`slideUp()`、`slideDown()`等方法让动态效果的实现变得轻松...
此问题主要出现在动画方法连续触发时,例如当快速连续触发鼠标事件如mouseover和mouseout时,动画可能会出现卡顿、重复执行或不按预期结束的情况。 在上述文件内容中,开发者提到了在实现鼠标悬停显示效果时,使用...
常见的事件有`click`、`mouseover`、`mouseout`等,通过事件处理函数,我们可以为每个事件定义相应的操作。 3. **窗口对象**:全局的`window`对象是JavaScript中的顶级对象,它包含了浏览器的所有功能,如`window....
5. **事件处理**:轮播图的暂停与继续滚动功能是通过监听鼠标的`mouseover`和`mouseout`事件来实现的。当鼠标进入轮播图区域,暂停自动轮播;当鼠标离开,恢复自动轮播。 6. **CSS样式**:轮播图的美观离不开CSS的...
5. **事件处理**:插件提供了多种事件回调函数,如`click`、`mouseover`和`mouseout`,允许开发者在用户与星星交互时执行特定的代码逻辑,如保存评分数据或显示提示信息。 ### 使用步骤 1. **引入jQuery库**:首先...
3. **事件处理(Event Handling)**:jQuery的事件处理函数如`click()`, `mouseover()`, `mouseout()`等简化了JavaScript的事件绑定。`bind()`, `unbind()`, 和 `live()`(在1.7版本后被`on()`取代)用于动态绑定和...
3. **事件处理(Events)**:jQuery简化了事件绑定和解绑,`click()`, `mouseover()`, `mouseout()`等方法对应各种事件。`$(document).ready()`用于页面加载完成后执行函数,`$(window).load()`则在所有资源加载完毕...
`click()`, `mouseover()`, `mouseout()`等方法可以方便地绑定事件处理函数,而`.on()`方法则支持动态绑定事件,提高了代码的灵活性。同时,`trigger()`可以触发已绑定的事件。 在jQuery1.11.0中,动画效果得到了...
jQuery 提供了一套简洁的事件绑定机制,如`click()`, `mouseover()`, `mouseout()`等。`on()`方法在1.7中成为主要的事件绑定方式,它能支持动态添加的元素的事件处理。 ```javascript $(document).on('click', '#...
`click()`, `mouseover()`, `mouseout()`等方法可以方便地绑定对应的事件,`$(document).ready()`则用于确保DOM加载完成后执行代码。 ### 二、jQuery动画 1. **基本动画**: jQuery的`fadeIn()`, `fadeOut()`, `...
3. **事件处理**: 使用`.on()`方法可以绑定各种事件,如`click()`, `mouseover()`, `mouseout()`等,同时支持事件委托。 4. **动画效果**: jQuery的`.animate()`方法可以创建自定义动画效果,而`.fadeIn()`, `....
`.click()`, `.mouseover()`, `.mouseout()`等简写方法可以方便地处理常见事件。1.8.3版中,事件处理更加优化,支持事件委托和命名空间。 4. **动画效果(Effects)**:jQuery的动画功能强大,`.fadeIn()`, `....
- jQuery 提供了一致的事件处理方法,如 `click()`, `mouseover()`, `mouseout()` 等,使得绑定和解绑事件变得简单。`on()` 和 `off()` 方法则提供了更高级的事件处理控制。 4. **动画效果** - `animate()` 方法...
`click()`, `mouseover()`, `mouseout()`等方法用于绑定事件,`off()`用于解除绑定。此外,`on()`方法可以实现动态事件绑定,处理动态添加到DOM的元素。 三、动画效果 jQuery的动画功能是其一大亮点。`fadeIn()`, ...
3. **事件处理(Event Handling)**:jQuery简化了事件绑定,如`click()`, `mouseover()`, `mouseout()`等。使用`on()`方法可以同时绑定多个事件,例如`$("button").on("click", function() {...})`。 4. **链式...
3. **事件处理(Event Handling)**:`click()`, `mouseover()`, `mouseout()`等方法可以绑定事件处理器。例如,`$("#button").click(function() { ... })`会监听按钮的点击事件。 4. **动画(Animations)**:...