实例讲解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 相关文章推荐
TFDN图片播放器 不错自动播放
Oct 03 Javascript
PJBlog插件 防刷新的在线播放器
Oct 25 Javascript
jquery下实现overlay遮罩层代码
Aug 25 Javascript
原生javascript实现图片按钮切换
Jan 12 Javascript
jquery中radio checked问题
Mar 16 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
Nov 24 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
May 09 Javascript
使用bootstrap3开发响应式网站
May 12 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
JS监听事件的叠加和移除功能
Nov 19 Javascript
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实现的三个常用加密解密功能函数示例
2017/11/06 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
js正则相关知识点专题
2018/05/10 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
在Mac OS上搭建Python的开发环境
2015/12/24 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
南京某公司笔试题
2013/01/27 面试题
教育专业个人求职信
2013/12/02 职场文书
后备干部考察材料
2014/02/12 职场文书
2014信息公开实施方案
2014/02/22 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python