http://www.mamicode.com/info-detail-928135.html
今天遇到這個(gè)樣一個(gè)問(wèn)題,右側(cè)的這個(gè)列表想鼠標(biāo)劃出的時(shí)候設(shè)為不可見(jiàn)捂齐。于是給列表加了監(jiān)聽(tīng)蛮放,mouseout
但是,鼠標(biāo)滑到上面具體某一項(xiàng)的時(shí)候也會(huì)觸發(fā)監(jiān)聽(tīng)的方法奠宜。原因是包颁,由父元素劃入子元素也觸發(fā)了mouseover事件。本來(lái)想通過(guò)事件冒泡的方式來(lái)解決压真,但是并不能滿(mǎn)足完全要求娩嚼。解決辦法如下:
1.把mouseout改為mouseleave,mouseover改為mouseenter【最佳】
先看一下區(qū)別:
mouseover與mouseenter:
不論鼠標(biāo)指針穿過(guò)被選元素或其子元素滴肿,都會(huì)觸發(fā)mouseover岳悟;
只有鼠標(biāo)指針從元素外穿入被選元素(到元素內(nèi))時(shí),才會(huì)觸發(fā)mouseenter嘴高。
mouseout與mouseleave:
不論鼠標(biāo)指針離開(kāi)被選元素或其子元素竿音,都會(huì)觸發(fā)mouseout;
只有鼠標(biāo)指針從元素內(nèi)穿出被選元素(到元素外)時(shí)拴驮,才會(huì)觸發(fā)mouseleave春瞬。
真的是很神奇,姿勢(shì)點(diǎn)get了吧套啤?試了試果然好使宽气!
2.不是辦法的辦法(實(shí)現(xiàn)了最終的效果,有點(diǎn)歪)
思路就是先打印一下這個(gè)event潜沦,看有啥可用的屬性沒(méi)萄涯。
然后操作看打印,找規(guī)律:
然后寫(xiě)判斷條件唆鸡。
這個(gè)辦法比較繁瑣涝影,需要多次操作找規(guī)律,看打印結(jié)果争占,雖然功能實(shí)現(xiàn)了燃逻,但不提倡序目。
3.事件冒泡的解決辦法(沒(méi)實(shí)現(xiàn)最后我們想要的,差一步)
利用e.stopPropagation()阻止事件近一步傳播伯襟。
調(diào)用該方法后猿涨,事件停止冒泡,可以阻止把事件分派到其他節(jié)點(diǎn)姆怪。
給每個(gè)子元素加mouseout的監(jiān)聽(tīng)叛赚,在處理方法中,調(diào)用e.stopPropagation()稽揭;父元素的mouseout正常俺附。
結(jié)果就是從子元素上移出時(shí),mouseout事件不會(huì)冒泡淀衣,不會(huì)在父元素上被捕獲昙读。
但是從父元素移到子元素上時(shí),會(huì)觸發(fā)父元素的mouseout膨桥,這就是不符合我們項(xiàng)目的地方蛮浑。