實(shí)例講解jquery中mouseleave和mouseout的區(qū)別
本文詳細(xì)的介紹了關(guān)于jQuery中mouseleave和mouseout的區(qū)別,分享給大家供大家參考,具體內(nèi)容如下
很多人在使用jQuery實(shí)現(xiàn)鼠標(biāo)懸停效果時(shí),一般都會(huì)用到mouseover和mouseout這對(duì)事件。而在實(shí)現(xiàn)過程中,可能會(huì)出現(xiàn)一些不理想的狀況。
先看下使用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>
第一行第二行第三行我們發(fā)現(xiàn)使用mouseout事件時(shí),鼠標(biāo)只要在下拉容器#list里一移動(dòng),就觸發(fā)了hide(),其實(shí)是因?yàn)閙ouseout事件是會(huì)冒泡的,也就是事件可能被同時(shí)綁定到了該容器的子元素上,所以鼠標(biāo)移出每個(gè)子元素時(shí)也都會(huì)觸發(fā)我們的hide()。
從jQuery 1.3開始新增了2個(gè)mouse事件,mouseenter和mouseleave。與mouseout事件不同,只有在鼠標(biāo)指針離開被選元素時(shí),才會(huì)觸發(fā) 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事件各有用途,因?yàn)槭录芭菰谀承r(shí)候是非常有用的
解決div mouseout事件冒泡的問題
解決的辦法是,使用jquery的bind方法
如:現(xiàn)在有一個(gè)div對(duì)象需要監(jiān)聽他的鼠標(biāo)事件
<div class="dpx2"><div class="dpx2_px" style="cursor:pointer;" id="searchSort">請(qǐng)選擇排序方式↓</div> <div class="dpx2_px_xl" id="sortList" style="display:none;position:absolute;z-index:5;"> <div><a class="sortA">按時(shí)間升序↑</a></div> <div><a class="sortA">按時(shí)間降序↓</a></div> <div><a class="sortA">按評(píng)論數(shù)量升序↑</a></div> <div><a class="sortA">按評(píng)論數(shù)量降序↓</a></div> <div><a class="sortA">按點(diǎn)擊數(shù)升序↑</a></div> <div><a class="sortA">按點(diǎn)擊數(shù)降序↓</a></div> </div> </div>
當(dāng)鼠標(biāo)移動(dòng)到ID為searchSort的Div上時(shí),顯示下面的div。當(dāng)鼠標(biāo)移出下面的div時(shí),隱藏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(); }); //關(guān)鍵的一句,綁定Div對(duì)象的mouseleave事件 sortList.bind("mouseleave", function() { $(this).hide(); }); });
根據(jù)上述講解,模擬實(shí)現(xiàn)下拉效果:
1.不論鼠標(biāo)指針離開被選元素還是任何子元素,都會(huì)觸發(fā) mouseout 事件。
2.只有在鼠標(biāo)指針離開被選元素時(shí),才會(huì)觸發(fā) mouseleave 事件。
<div class="sel_box"> <input type="button" value="請(qǐng)選擇所屬部門" id="sel_dept" /> <div class="hide" id="sel_dept_sh" style="display: none;"> <p> <font>深圳市公司 </font> </p> <p> <font>集團(tuán)管理層 </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就實(shí)現(xiàn)了模仿下拉框的效果 $(this).find(".hide").hide(); }); $(".sel_box").bind("mouseout",function(){//而mouseout則不行,什么時(shí)候都會(huì)觸發(fā) $(this).find(".hide").hide(); }); </script>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
jQuery制作簡(jiǎn)潔的多級(jí)聯(lián)動(dòng)Select下拉框
省市多級(jí)聯(lián)動(dòng)的select下拉框有很多種實(shí)現(xiàn)方式,度娘上隨便一搜就一大堆,今天我們來討論的這款特效,代碼卻很簡(jiǎn)潔,兼容性也非常棒,推薦給大家。2014-12-12jQuery3.0中的buildFragment私有函數(shù)詳解
在 jQuery3.0中,buildFragment 是一個(gè)私有函數(shù),用來構(gòu)建一個(gè)包含子節(jié)點(diǎn) fragment 對(duì)象。下文給大家介紹jQuery3.0中的buildFragment私有函數(shù)詳解,對(duì)jquery3.0 buildfragment相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-08-08jQuery獲取cookie值及刪除cookie用法實(shí)例
這篇文章主要介紹了jQuery獲取cookie值及刪除cookie用法,實(shí)例分析了jQuery操作cookie時(shí)域和路徑的作用,以及針對(duì)cookie的讀取與刪除技巧,需要的朋友可以參考下2016-04-04jquery插件jquery.LightBox.js實(shí)現(xiàn)點(diǎn)擊放大圖片并左右點(diǎn)擊切換效果(附demo源碼下載)
這篇文章主要介紹了jquery插件jquery.LightBox.js實(shí)現(xiàn)點(diǎn)擊放大圖片并左右點(diǎn)擊切換效果,可實(shí)現(xiàn)仿相冊(cè)插件切換效果,并附代碼demo源碼供讀者下載參考,需要的朋友可以參考下2016-02-02jquery.pagination.js 無刷新分頁(yè)實(shí)現(xiàn)步驟分享
jquery.pagination.js 無刷新分頁(yè)實(shí)現(xiàn)步驟分享,需要的朋友可以參考下2012-05-05jquery插件jTimer(jquery定時(shí)器)使用方法
很多時(shí)候我們需要按時(shí)間間隔執(zhí)行一個(gè)任務(wù),當(dāng)滿足一定條件時(shí)停止執(zhí)行.此插件旨在解決這一經(jīng)常遇到的問題2013-12-12jquery.fastLiveFilter.js實(shí)現(xiàn)輸入自動(dòng)過濾的方法
這篇文章主要介紹了jquery.fastLiveFilter.js實(shí)現(xiàn)輸入自動(dòng)過濾的方法,涉及jquery鼠標(biāo)事件及字符串遍歷的相關(guān)技巧,簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-08-08