实例讲解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 相关文章推荐
Stop SQL Server
Jun 21 Javascript
Prototype 学习 工具函数学习($w,$F方法)
Jul 12 Javascript
利用javascript/jquery对上传文件格式过滤的方法
Jul 25 Javascript
Firebug 字幕文件JSON地址获取代码
Oct 28 Javascript
jQuery基础知识filter()和find()实例说明
Jul 06 Javascript
Vue Cli与BootStrap结合实现表格分页功能
Aug 18 Javascript
Vue框架之goods组件开发详解
Jan 25 Javascript
vue 中引用gojs绘制E-R图的方法示例
Aug 24 Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
Sep 14 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
Aug 24 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
Oct 27 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 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
javascript 节点遍历函数
2010/03/28 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
微信小程序实现页面左右滑动
2020/11/16 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python使用pymysql小技巧
2017/06/04 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
快速查找Python安装路径方法
2020/02/06 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
巴西女装购物网站:Eclectic
2018/04/24 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
计算机系本科生求职信
2014/05/31 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
介绍长城的导游词
2015/01/30 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
闪闪的红星观后感
2015/06/08 职场文书
贷款收入证明格式
2015/06/24 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技