欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript中onmouse事件在div中失效問題的解決方法

 更新時間:2012年01月09日 23:34:22   作者:  
我們預(yù)期只有當(dāng)鼠標(biāo)從div中移開的時候才會觸發(fā)onmouseout事件,可事實上,當(dāng)我們移到div中的元素時,例如:本例中的a標(biāo)簽時,就會觸發(fā) onmousout事件
也就是說,移到對象的子對象上,也算onmouseout了。但這往往會達(dá)不到我們想要的預(yù)期效果。這是由于javascript自身的冒泡特性導(dǎo)致的(即在子元素上觸發(fā)了事件,并冒泡到了父元素-堆棧后進(jìn)先出算法)。今天在網(wǎng)上搜了一下,找了以下的解決辦法(兼容IE和Firefox)。
在IE下解決問題很簡單,用onMouseEnter、onMouseLeave來代替onMouseOver、onMouseOut就行了,他們的作用基本相同,但前者不會發(fā)生冒泡(如果用 jQuery的event事件,只要綁定mouseleave、mouseenter即可)。但firefox下并沒有onMouseEnter、onMouseLeave這兩個事件。那么只能使用純js來解決IE及Firefox的兼容性問題了:
原理:通過判斷觸發(fā)onMouseOut事件后,鼠標(biāo)到達(dá)的元素是不是包含在父元素信息欄(div)內(nèi),如果是就表示鼠標(biāo)還在信息欄(div)上,則不隱藏。如果否就表示鼠標(biāo)真的移出了信息欄(div),那么信息欄就要隱藏。
復(fù)制代碼 代碼如下:

// 首先來獲取觸發(fā)onMouseOut事件的元素,IE下通過event的toElement屬性來獲得,firefox下通過event的relatedTarget屬性來獲得。
IE:event.toElement ,F(xiàn)irefox:event.relatedTarget(注意:Firefox下的event須通過在函數(shù)調(diào)用時傳入,而IE下的event則可以直接通過window.event系統(tǒng)對象來獲得)
// ① 接下來就是判斷獲取的元素是否是主體div的子元素(IE下可以通過元素的obj.contains(element)方法來判斷,但Firefox下沒有這個方法,所以需要給firefox定義元素的obj.contains()方法)。
代碼如下:
if(typeof(HTMLElement)!="undefined") // 給firefox定義contains()方法,IE已經(jīng)系統(tǒng)自帶有這個方法了
{
HTMLElement.prototype.contains=function(obj) {
while(obj!=null&&typeof(obj.tagName)!="undefind") { // 通過循環(huán)對比來判斷是不是obj的父元素
     if(obj==this) { return true; }
     obj=obj.parentNode;
   }
return false;
};
}
// ② 獲取和判斷搞定后,我們就可以通過判斷IE和Firefox來針對處理了,通過navigator.userAgent來判斷瀏覽器類型:
if(navigator.userAgent.indexOf("MSIE")>0) {
return "MSIE";
}
if(navigator.userAgent.indexOf("Firefox")>0){
return "Firefox";
}
// ③ 到此為止所有要解決的問題都得到了解決,當(dāng)觸發(fā)onMouseOut事件時,我們將針對不同的瀏覽器先獲取鼠標(biāo)到達(dá)的元素,然后通過判斷該元素是否在信息欄(div)內(nèi),如果元素是子元素,那么不執(zhí)行onMouseOut事件,反之則執(zhí)行事件,隱藏信息欄,完成后的代碼如下:
function hideMsgBox(theEvent){ //theEvent用來傳入事件,F(xiàn)irefox的方式
  if (theEvent){
  var browser=navigator.userAgent; //取得瀏覽器屬性
  if (browser.indexOf("Firefox")>0){ //如果是Firefox
   if (document.getElementById('MsgBox').contains(theEvent.relatedTarget)) {//如果是子元素
   return; //結(jié)束函數(shù)
}
}
if (browser.indexOf("MSIE")>0){ //如果是IE
if (document.getElementById('MsgBox').contains(event.toElement)) { //如果是子元素
return; //結(jié)束函數(shù)
}
}
}
/*要執(zhí)行的操作(如:隱藏)*/
document.getElementById('MsgBox').style.display='none' ;
……
}
// ④ 在信息欄(Div)上設(shè)置onMouseOut=hideMsgBox(event)來調(diào)用。

另外,通過設(shè)置window.event.cancelBubble = true (IE) ,event.stopPropagation() event.preventDefault() (Firefox) 也可以解決問題,但是需要遍歷所有子元素,影響效率,所以還是在觸發(fā)onMouseOut事件時再進(jìn)行上述判斷分別處理比較合適。

相關(guān)文章

  • JavaScript中EventBus實現(xiàn)對象之間通信

    JavaScript中EventBus實現(xiàn)對象之間通信

    這篇文章主要介紹了JavaScript中EventBus實現(xiàn)對象之間通信,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 使用原生JS添加進(jìn)場和退場動畫詳解

    使用原生JS添加進(jìn)場和退場動畫詳解

    總所周知啊,身為一個合格的前端搬磚工,會編寫并且添加一些基礎(chǔ)的動畫效果可謂是比較基礎(chǔ)且輕車熟路的技能了。本文將教大家如何使用原生JS添加進(jìn)場和退場動畫,感興趣的可以了解一下
    2022-10-10
  • Javascript中拼接大量字符串的方法

    Javascript中拼接大量字符串的方法

    這篇文章主要介紹了Javascript中拼接大量字符串的方法,本文實現(xiàn)的就是JS語言中的Heredoc語法,需要的朋友可以參考下
    2015-02-02
  • HTML+CSS+JS實現(xiàn)的簡單應(yīng)用小案例分享

    HTML+CSS+JS實現(xiàn)的簡單應(yīng)用小案例分享

    這篇文章主要為大家分享四個用HTML+CSS+JS實現(xiàn)的簡單應(yīng)用小案例,有:猜數(shù)字、表白墻、切換日夜間模式和待辦事項,需要的可以參考一下
    2022-02-02
  • 淺析js中的浮點(diǎn)型運(yùn)算問題

    淺析js中的浮點(diǎn)型運(yùn)算問題

    本篇文章主要是對js中浮點(diǎn)型運(yùn)算的問題進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • 淺談Javascript中的對象和繼承

    淺談Javascript中的對象和繼承

    這篇文章主要介紹了Javascript中的對象和繼承,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • javascript連續(xù)賦值問題

    javascript連續(xù)賦值問題

    本文通過具體的示例來給大家詳細(xì)解釋了下javascript的連續(xù)賦值問題,十分的實用,有需要的小伙伴可以參考下。
    2015-07-07
  • 理解JavaScript的prototype屬性

    理解JavaScript的prototype屬性

    JavaScript可以說是最讓人初學(xué)者難以理解的單一屬性。我看了一些資料后,開始明白其實這些困難很大程度來自prototype這個名字本身的二義性
    2012-02-02
  • JavaScript 隱式類型轉(zhuǎn)換規(guī)則詳解

    JavaScript 隱式類型轉(zhuǎn)換規(guī)則詳解

    這篇文章主要為大家介紹了JavaScript 隱式類型轉(zhuǎn)換規(guī)則詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05
  • js實現(xiàn)登錄框鼠標(biāo)拖拽效果

    js實現(xiàn)登錄框鼠標(biāo)拖拽效果

    本文主要介紹了js實現(xiàn)登錄框鼠標(biāo)拖拽效果的實例,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03

最新評論