mouseover,mouseout,mouseenter,mouseleave的区别

相信做前端开发的都听说过“冒泡型事件”吧,《JavaScript高级程序设计》第九章有详细的讲述,但是,在学习的时候一知半解,也没详细去理解,导致最近在工作中碰到了问题:有许多 li 标签,标签上有2个按钮,当且仅当鼠标移入 li 时才会显示上面的2个按钮,如下图,左边是默认状态,右边是鼠标移入状态,开始使用的是 mouseover 和 mouseout ,结果鼠标移动到按钮上时,按钮会出现闪烁的情况。

    

后来对比了mouseover,mouseout,mouseenter,mouseleave的区别发现,mouseover 和 mouseout 在鼠标移入移出时会触发其父级元素的 mouseover,mouseout 方法,而 mouseenter,mouseleave 只会触发当前鼠标移入和移出元素的方法。换句话说,后两者是不冒泡的事件,前两者是会冒泡的事件。

下面是实验详细:

<div id="mouseEventTest">
    <span id="parent">aaaaaaaaaaaaaaa<span id="child">bbbbbbbbbb</span></span>
</div>

页面如下:

简单的css代码:

span{
    padding: 10px;
    width: auto;
    line-height: 30px;
}

parent 和 child 的 mouseover,mouseout,mouseenter,mouseleave 方法如下:

    function parentMouseOver(e) {
        console.log(‘parentMouseOver‘);
    }
    function parentMouseOut(e) {
        console.log(‘parentMouseOut‘);
    }
    function childMouseOver(e) {
        console.log(‘childMouseOver‘);
    }
    function childMouseOut(e) {
        console.log(‘childMouseOut‘);
    }
    function parentMouseEnter(e) {
        console.log(‘parentMouseEnter‘);
    }
    function parentMouseLeave(e) {
        console.log(‘parentMouseLeave‘);
    }
    function childMouseEnter(e) {
        console.log(‘childMouseEnter‘);
    }
    function childMouseLeave(e) {
        console.log(‘childMouseLeave‘);
    }

分别设置两组绑定:

1)mouseover,mouseout

    $("#parent").bind(‘mouseover‘,parentMouseOver);
    $("#parent").bind(‘mouseout‘,parentMouseOut);
    $("#child").bind(‘mouseover‘,childMouseOver);
    $("#child").bind(‘mouseout‘,childMouseOut);

2)mouseenter,mouseleave

    $("#parent").bind(‘mouseenter‘, parentMouseEnter);
    $("#parent").bind(‘mouseleave‘, parentMouseLeave);
    $("#child").bind(‘mouseenter‘, childMouseEnter);
    $("#child").bind(‘mouseleave‘, childMouseLeave);

操作方式是:鼠标从 parent 左边移入,然后从右边移出。

绑定的结果如下:

1)组(四个红框分别是:进入 parent ,从 parent 到 child ,从 child  到 parent ,移出 parent):

2)组:

实验结果可以清晰地看出 mouseover,mouseout,mouseenter,mouseleave 的区别。

mouseover,mouseout,mouseenter,mouseleave的区别

时间: 2024-12-07 16:56:54

mouseover,mouseout,mouseenter,mouseleave的区别的相关文章

mouseover ,mouseout ,mouseenter,mouseleave的区别

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

理解mouseover,mouseout,mouseenter,mouseleave

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

mouseover与mouseenter与mousemove的区别mouseout与mouseleave的区别

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="script/jquery-1.11.0.min.js" type="text/javascript"></script> <script type="text/javascript">

mouseover与mouseenter、 mouseout与mouseleave的区别

mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseout与mouseleave 不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件. 只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件.

mouseover与mouseenter,mouseout与mouseleave的区别

mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件.只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseout与mouseleave不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件.

jQuery mouseover与mouseenter,mouseout与mouseleave的区别

mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件.只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseout与mouseleave不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件.

曾经跳过的坑----jQuery mouseover与mouseenter,mouseout与mouseleave的区别

mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseout与mouseleave 不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件. 只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件. 在div里添加有子元素,刚开始使用mouseout ,结果每每都是鼠标还没放到刚显示出来的div上它就消失了,郁闷了半天改为le

mouseover与mouseenter、mouseout与mouseleave的区别

不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. 测试代码如下: <html><head><script type="text/javascript" src="/jquery/jquery.js"></script><script type="text/javascript">x=0;y=0;

mouseout和mouseleave的区别

经常用mouseout来隐藏一个原素,但是当隐藏元素有多个层级时候,发现mouseout会重复多次发生.这是因为mouseout会对子元素的移出事件也有响应,这时候可以试试mouseleave. <html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascr

jQuery中 mouseover、mouseout、mouseenter、mouseleave的区别

不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件,与其相对应的是mouseout只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件,与其相对应的是mouseleave 一.以下这个例子能很好的帮助我们理解mouseover和mouseenter的区别: 1 <html> 2 <head> 3 <script type="text/javascript" src="/jquery/jquery.js"