实例讲解jquery中mouseleave和mouseout的区别


Posted in Javascript onFebruary 17, 2016

本文详细的介绍了关于jQuery中mouseleave和mouseout的区别,分享给大家供大家参考,具体内容如下
很多人在使用jQuery实现鼠标悬停效果时,一般都会用到mouseover和mouseout这对事件。而在实现过程中,可能会出现一些不理想的状况。
先看下使用mouseout的效果:

<p>先看下使用mouseout的效果:</p>
<div id="container" style="width: 300px;">
<div id="title" style="cursor: pointer; background: #ccc;">使用了mouseout事件↓</div>
<div id="list" style="display: none; position: absolute; background:#fff; border: 1px solid #ccc; width: 298px;">
<div>第一行</div>
<div>第二行</div>
<div>第三行</div>
</div>
</div>
<p><script type='text/javascript'> 
jQuery(document).ready(function($) { 
   $("#title").mouseover(function() { 
     var offset = $(this).offset(); 
     $("#list").css({left: offset.left, top: offset.top+19}).show(); 
   }); 
   $("#container").mouseout(function() { 
     $("#list").hide(); 
   }); 
 }); 
</script>

第一行第二行第三行我们发现使用mouseout事件时,鼠标只要在下拉容器#list里一移动,就触发了hide(),其实是因为mouseout事件是会冒泡的,也就是事件可能被同时绑定到了该容器的子元素上,所以鼠标移出每个子元素时也都会触发我们的hide()。
从jQuery 1.3开始新增了2个mouse事件,mouseenter和mouseleave。与mouseout事件不同,只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。
我们来看一下mouseleave事件的效果:

<div id="container2" style="width: 300px;">
<div id="title2" style="cursor: pointer; background: #ccc;">使用了mouseleave事件↓</div>
<div id="list2" style="display: none; position: absolute; background:#fff; border: 1px solid #ccc; width: 298px;">
<div>第一行</div>
<div>第二行</div>
<div>第三行</div>
</div>
</div>
<script type='text/javascript'> 
jQuery(document).ready(function($) { 
   $("#title2").mouseover(function() { 
     var offset = $(this).offset(); 
     $("#list2").css({left: offset.left, top: offset.top+19}).show(); 
   }); 
   // 绑定mouseleave事件,效果很好 
   $("#container2").mouseleave(function() { 
     $("#list2").hide(); 
   }); 
 }); 
</script>
<p>

第一行第二行第三行mouseleave和mouseout事件各有用途,因为事件冒泡在某些时候是非常有用的
解决div mouseout事件冒泡的问题
解决的办法是,使用jquery的bind方法
 如:现在有一个div对象需要监听他的鼠标事件

<div class="dpx2"><div class="dpx2_px" style="cursor:pointer;" id="searchSort">请选择排序方式↓</div>
      <div class="dpx2_px_xl" id="sortList" style="display:none;position:absolute;z-index:5;">
        <div><a class="sortA">按时间升序↑</a></div>
        <div><a class="sortA">按时间降序↓</a></div>
        <div><a class="sortA">按评论数量升序↑</a></div>
        <div><a class="sortA">按评论数量降序↓</a></div>
        <div><a class="sortA">按点击数升序↑</a></div>
        <div><a class="sortA">按点击数降序↓</a></div>
      </div>
    </div>

当鼠标移动到ID为searchSort的Div上时,显示下面的div。当鼠标移出下面的div时,隐藏div
JS为:

$(function(){
         var sortList = $("#sortList");
      $("#searchSort").mouseover(function() {
         var offset = $(this).offset();
        sortList.css("left", offset.left);
        sortList.css("top", offset.top+20);
        sortList.show();
      });
//关键的一句,绑定Div对象的mouseleave事件
      sortList.bind("mouseleave", function() {
        $(this).hide();
      });
    });

根据上述讲解,模拟实现下拉效果: 
1.不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。

2.只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。

<div class="sel_box">
  <input type="button" value="请选择所属部门" id="sel_dept" />
  <div class="hide" id="sel_dept_sh" style="display: none;">
    <p>
      <font>深圳市公司 </font>
    </p>
    <p>
      <font>集团管理层 </font>
    </p>
  </div>
</div>
 
<script type="text/javascript">
$(".sel_box").click(function(event){
   if(event.target.id == 'sel_dept'){
     $("#sel_dept_sh").show(); //显示下拉框
     $("#sel_dept_sh p font").click(function(){
       $("#sel_dept").val('');
       var text = $(this).text();
      // alert(text);
       $("#sel_dept").val(text).css("color","#000");
       $("#sel_dept_sh").hide();
     });
 
   }else{
     $("#sel_dept_sh").hide();
   }
   
 
});
 
$(".sel_box").bind("mouseleave",function(){//用mouseleave就实现了模仿下拉框的效果
    $(this).find(".hide").hide();  
  });
 
$(".sel_box").bind("mouseout",function(){//而mouseout则不行,什么时候都会触发
    $(this).find(".hide").hide();  
  });
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
通过jQuery源码学习javascript(三)
Dec 27 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
jQuery选择器之表单元素选择器详解
Sep 19 jQuery
VUE前端cookie简单操作
Oct 17 Javascript
Mac下安装vue
Apr 11 Javascript
Web安全之XSS攻击与防御小结
Dec 13 Javascript
JavaScript解析机制与闭包原理实例详解
Mar 08 Javascript
详解Vue前端对axios的封装和使用
Apr 01 Javascript
通过实例了解js函数中参数的传递
Jun 15 Javascript
微信小程序 网络通信实现详解
Jul 23 Javascript
vue中实现上传文件给后台实例详解
Aug 22 Javascript
Vue 修改网站图标的方法
Dec 31 Vue.js
Javascript实现图片轮播效果(二)图片序列节点的控制实现
Feb 17 #Javascript
Bootstrap中CSS的使用方法
Feb 17 #Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
Feb 17 #Javascript
基于javascript简单实现对身份证校验
Jan 25 #Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
Feb 17 #Javascript
Bootstrap布局组件应用实例讲解
Feb 17 #Javascript
深入php面向对象、模式与实践
Feb 16 #Javascript
You might like
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
Angular的$http与$location
2016/12/26 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
python使用win32com库播放mp3文件的方法
2015/05/30 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
python最长回文串算法
2018/06/04 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
dpn网络的pytorch实现方式
2020/01/14 Python
Python求凸包及多边形面积教程
2020/04/12 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
哈理工毕业生的求职信
2013/12/22 职场文书
分家协议书范本
2016/03/22 职场文书
入团申请书格式
2019/06/20 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
Python制作动态字符画的源码
2021/08/04 Python
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python