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

  • 相关阅读:
    Perl字符集就是方括号(或称中括号)里一连串可能的字符,只匹配单一字符,该单一字符可以是字符集里的任何一个,“-”在字符集里有特殊含义:表示某个范围的字符。而字符集意外的连字符不具有特殊意义。
    为什么 [00-177]匹配任意7bit ascii码 ?
    用字符串对列表赋值,一个字符串对应一个列表元素,eg: my @escaped = "asteriskasterisk hash access unpack_func";
    正则-量词,匹配的个数
    TCP/IP网络编程 读书笔记1
    LeetCode75 Sort Colors
    LeetCode74 Search a 2D Matrix
    LeetCode73 Set Matrix Zeroes
    LeetCode Weekly Contest 6
    LeetCode72 Edit Distance
  • 原文地址:https://www.cnblogs.com/fogwang/p/5666717.html
Copyright © 2011-2022 走看看