執行個體講解jquery中mouseleave和mouseout的區別,jquerymouseleave

來源:互聯網
上載者:User

執行個體講解jquery中mouseleave和mouseout的區別,jquerymouseleave

本文詳細的介紹了關於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>

以上就是本文的全部內容,希望對大家的學習有所協助。

您可能感興趣的文章:
  • jquery中的mouseleave和mouseout的區別 模仿下拉框效果
  • Jquery利用mouseenter和mouseleave實現滑鼠經過彈出層且可以點擊
  • jQuery中hover與mouseover和mouseout的區別分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.