实例讲解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 相关文章推荐
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
详解maxlength属性在textarea里奇怪的表现
Dec 27 Javascript
全面了解JS中的匿名函数
Jun 29 Javascript
详解用vue-cli来搭建vue项目和webpack
Apr 20 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
详解jQuery中的getAll()和cleanData()
Apr 15 jQuery
vue项目打包上传github并制作预览链接(pages)
Apr 19 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
基于JS判断对象是否是数组
Jan 10 Javascript
vue cli3适配所有端方案的实现
Apr 13 Javascript
VUE实时监听元素距离顶部高度的操作
Jul 29 Javascript
Vue实现跑马灯样式文字横向滚动
Nov 23 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中一些可能会被忽略的问题
2013/06/21 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
jQuery的链式调用浅析
2010/12/03 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
Python 返回汉字的汉语拼音
2009/02/27 Python
python插入排序算法实例分析
2015/07/03 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
2020/07/01 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
高三自我鉴定
2013/10/23 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
感恩教师节主题班会
2015/08/12 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
python实战之90行代码写个猜数字游戏
2021/04/22 Python