zoukankan      html  css  js  c++  java
  • jQuery中mouseleave和mouseout的区别详解

    很多人在使用jQuery实现鼠标悬停效果时,一般都会用到mouseover和mouseout这对事件。而在实现过程中,可能会出现一些不理想的状况。

    先看下使用mouseout的效果:

    <p>先看下使用mouseout的效果:</p>
    <div id="container" style=" 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;  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=" 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;  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();
                });
            });

    本文来源:http://www.php100.com/html/program/jquery/2013/0905/5891.html

  • 相关阅读:
    手动卸载 SQL Server 2005 Express
    标准正态分布函数数值表
    SQL Server, Error converting data type nvarchar to int
    如何修改windows XP的默认字体?
    C# 字符串格式化
    跨域cookie访问 Easy Cross Domain Cookies (Sharing cookies between domains)
    25_Android_网络通信之资讯客户端(下)
    毕业设计经验总结
    数学之路(2)四大神器haskell(28)
    java.lang.RuntimeException: Invalid action class configuration that references an unknown class name
  • 原文地址:https://www.cnblogs.com/fogwang/p/5666717.html
Copyright © 2011-2022 走看看