← jQuery mouseenter()事件:鼠标进入元素时触发 jQuery hover()方法:一个方法搞定鼠标悬停 →

jQuery mouseleave()事件:鼠标离开元素时触发

原创 2026-04-30 jQuery 已有人查阅

上一篇讲了 mouseenter(),它负责检测鼠标进入元素的时刻。现在来看它的搭档——mouseleave()。当鼠标指针从元素上方移出、离开元素的边界时,mouseleave 事件被触发。

mouseleave() 和 mouseenter() 总是一起出现,一个管“进来”,一个管“出去”。这种成对使用的模式在悬停交互中几乎是标配——鼠标进入时显示下拉菜单或提示框,鼠标离开时把它们隐藏。少了其中任何一个,交互体验就会不完整。

语法形式

触发 mouseleave 事件:

$(selector).mouseleave()

程序化地触发 mouseleave 事件。

绑定 mouseleave 事件:

$(selector).mouseleave(function(){
    // 鼠标离开元素时执行的代码
})

给选中元素绑定鼠标离开事件,这是常规用法。

基础示例:鼠标离开标题时显示告别提示

下面这个例子监听标题元素的 mouseleave 事件。当鼠标从标题上移开时,下方显示告别提示,2 秒后自动消失。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>mouseleave() 基础示例</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>
<body>
    <h1 id="mainHeading">将鼠标移入后移出此标题</h1>
    <div id="leaveMsg" style="color:#c0392b;font-weight:bold;"></div>

    <script>
        $(document).ready(function(){
            $("#mainHeading").mouseleave(function(){
                $("div").text("鼠标已离开标题区域").show().fadeOut(2000);
            });
        });
    </script>
</body>
</html>

鼠标移入标题时页面没有反应,但一旦移出,提示文字立刻出现并渐隐。再次移入再移出,提示再次出现。这个触发逻辑和 mouseenter 刚好对称——一个在进入边界时响应,一个在离开边界时响应。

进阶示例:进入变红,离开变蓝

下面这个例子把 mouseenter() 和 mouseleave() 放在一起,实现颜色切换效果。鼠标移入段落变红色,移出变蓝色。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>mouseenter 与 mouseleave 颜色切换示例</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
    <p style="padding:12px;cursor:pointer;font-weight:bold;">将鼠标移入移出这段文字</p>

    <script>
        $(document).ready(function(){
            $("p").mouseenter(function(){
                $("p").css("background-color", "#e74c3c");
            });
            $("p").mouseleave(function(){
                $("p").css("background-color", "#2980b9");
            });
        });
    </script>
</body>
</html>

鼠标进入段落区域,背景变红;移出后背景变蓝。这种模式可以套用到很多场景——导航链接的悬停高亮、卡片的阴影变化、图标按钮的状态切换等。

mouseleave 和 mouseout 的区别

这两个方法都是在鼠标离开元素时触发,但行为上有一个重要差异,和 mouseenter 与 mouseover 的区别对应:

  • mouseleave 不会冒泡。鼠标从父元素移动到内部的子元素上时,父元素的 mouseleave 不会触发。只有当鼠标离开父元素的边界时才会触发。

  • mouseout 会冒泡。鼠标从父元素移动到子元素上时,父元素的 mouseout 也会被触发,因为子元素的 mouseout 冒泡到父元素了。

这个差异在嵌套结构多的元素上尤其明显。比如一个卡片容器里包含标题、图片、描述文字等多个子元素,用 mouseleave 可以保证鼠标在整个卡片区域内移动时不会反复触发离开事件,只有在真正离开卡片边界时才触发一次。用 mouseout 的话,鼠标每经过一个子元素边界都会触发一次。

项目开发中,mouseenter/mouseleave 组合比 mouseover/mouseout 更符合直觉,也少了很多需要额外处理冒泡的麻烦。除非有特殊需求要利用冒泡机制做事件委托,一般悬停交互都用 mouseenter/mouseleave

本节课程知识要点

  • mouseleave() 在鼠标指针离开元素边界时触发,通常与 mouseenter() 成对使用。

  • mouseleave 不会冒泡,鼠标在元素内部子元素之间移动时不会误触发。

  • 与 mouseout 的核心区别在于冒泡行为:mouseleave 不冒泡,mouseout 会冒泡。

  • 项目开发中推荐 mouseenter/mouseleave 组合处理悬停交互,行为更稳定可预期。

  • 如果悬停效果只是改变样式,优先考虑 CSS 的 :hover 伪类;涉及显示隐藏元素、触发动画或异步请求等逻辑时才用 JS 事件处理。

mouseleave() 完成了鼠标悬停交互闭环的“离开”环节。它和 mouseenter() 配对构成了完整的鼠标进出监听体系。理解它们在事件冒泡上的行为差异,能帮助在开发中避开很多奇怪的“明明鼠标还在里面却触发了离开事件”的问题。到这里,鼠标事件的四个核心方法——mouseentermouseleavemouseovermouseout——的关系已经清晰了,后续在项目中根据场景选用即可。

← jQuery mouseenter()事件:鼠标进入元素时触发 jQuery hover()方法:一个方法搞定鼠标悬停 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号