實(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)過(guò)程中,可能會(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開(kāi)始新增了2個(gè)mouse事件,mouseenter和mouseleave。與mouseout事件不同,只有在鼠標(biāo)指針離開(kāi)被選元素時(shí),才會(huì)觸發(fā) mouseleave 事件。
我們來(lái)看一下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事件冒泡的問(wèn)題
解決的辦法是,使用jquery的bind方法
如:現(xiàn)在有一個(gè)div對(duì)象需要監(jiān)聽(tīng)他的鼠標(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)指針離開(kāi)被選元素還是任何子元素,都會(huì)觸發(fā) mouseout 事件。
2.只有在鼠標(biāo)指針離開(kāi)被選元素時(shí),才會(huì)觸發(fā) mouseleave 事件。
<div class="sel_box">
<input type="button" value="請(qǐng)選擇所屬部門(mén)" 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中l(wèi)ive與bind方法的區(qū)別
本篇文章主要是對(duì)jQuery中l(wèi)ive與bind方法的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12
jQuery+C#實(shí)現(xiàn)參數(shù)RSA加密傳輸功能【附j(luò)sencrypt.js下載】
這篇文章主要介紹了jQuery+C#實(shí)現(xiàn)參數(shù)RSA加密傳輸功能,結(jié)合具體實(shí)例形式分析了js使用jsencrypt.js插件前端字符數(shù)據(jù)處理傳輸及C#后臺(tái)數(shù)據(jù)轉(zhuǎn)換與RSA加密相關(guān)操作技巧,并附帶jsencrypt.js供讀者下載參考使用,需要的朋友可以參考下2017-06-06
jQuery 頁(yè)面載入進(jìn)度條實(shí)現(xiàn)代碼
頁(yè)面 Loading 條基本人人都會(huì)用。它的原理很簡(jiǎn)單:在頁(yè)頭放置一個(gè)文字或者圖片的 loading 狀態(tài),然后頁(yè)尾載入一段 JS 隱藏掉,即根據(jù)瀏覽器的載入順序來(lái)實(shí)現(xiàn)的簡(jiǎn)易 Loading 狀態(tài)條。2009-02-02
jQuery UI插件實(shí)現(xiàn)百度提詞器效果
這篇文章主要介紹了jQuery UI插件實(shí)現(xiàn)百度提詞器效果,每個(gè)輸入框中有相應(yīng)的文字提示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
jquery中關(guān)于bind()方法的使用技巧分享
這篇文章主要給大家分享了jquery中關(guān)于bind()方法的使用技巧,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03
如何快速解決JS或Jquery ajax異步跨域的問(wèn)題
如何快速解決JS或Jquery ajax異步跨域的問(wèn)題呢?下面小編就為大家分享一篇快速解決Jquery ajax異步跨域問(wèn)題的方法,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

