vue?鼠標(biāo)移入移出(hover)切換顯示圖片問題
鼠標(biāo)移入移出(hover)切換顯示圖片
css實(shí)現(xiàn)
代碼:
<div @click="exitConnect()" class="exit_hover"> ? ? ? ?<img class="exit1 mr10" :src="exit" style="width:20px;height:20px;" /> ? ? ? ?<img class="exit2 mr10" :src="exitActive" style="width:20px;height:20px;" />斷開連接 </div>
css:
.exit_hover .exit1{display:inline-block;} .exit_hover .exit2{display:none;} .exit_hover:hover .exit1{display:none;} .exit_hover:hover .exit2{display:inline-block;}
js實(shí)現(xiàn)
使用一個(gè)變量來表示鼠標(biāo)移入或移出的狀態(tài),鼠標(biāo)移入事件mouseenter,移出事件mouseleave,在這兩個(gè)事件中來修改這個(gè)變量。
注意:移出事件別用mouseout。
代碼:
<div @mouseenter="isExitHover=true" @mouseleave="isExitHover=false" class="menus"> ? ? ? ?<img v-show="!isExitHover" :src="exit" style="width:16px;height:16px;" class="mr10" /> ? ? ? ?<img v-show="isExitHover" :src="exitActive" style="width:16px;height:16px;" class="mr10" />斷開連接 </div>
data:
? ? ? ? ? ? exit: require("@/assets/img/exit.svg"), ? ? ? ? ? ? exitActive: require("@/assets/img/exit_active.svg"), ? ? ? ? ? ? isExitHover:false,//是否懸浮到圖標(biāo)上
vue鼠標(biāo)移入移出事件注意事項(xiàng)
發(fā)生冒泡事件
今天在寫一個(gè)鼠標(biāo)的移入移出的事件,使用mouseout和mouseover期間,踩了一個(gè)大坑,經(jīng)過半天的排查,終于發(fā)現(xiàn)是發(fā)生了冒泡事件。
把mouseout和mouseover綁在父元素上,移過父元素和子元素都會(huì)觸發(fā)。即子元素mouseover和mouseout事件會(huì)冒泡至父元素
一、解決方法
使用 mouseenter 和 mouseleave 事件。
這兩個(gè)事件是根據(jù)組件在頁(yè)面上的范圍進(jìn)行計(jì)算的,只要在某個(gè)組件上添加了這兩個(gè)事件,會(huì)計(jì)算鼠標(biāo)的位置,只要在組件范圍內(nèi),就可以觸發(fā)。
二、定義
1、mouseenter:在鼠標(biāo)光標(biāo)從元素外部首次移動(dòng)到元素范圍之內(nèi)時(shí)觸發(fā),這個(gè)事件不冒泡。
2、mouseleave:在位于元素上方的鼠標(biāo)光標(biāo)移動(dòng)到元素范圍之外時(shí)觸發(fā),這個(gè)事件不冒泡。
3、mouseover:在鼠標(biāo)指針位于一個(gè)元素外部,然后用戶將其首次移入另一個(gè)元素邊界之內(nèi)時(shí)觸發(fā)。
4、mouseout:在鼠標(biāo)指針位于一個(gè)元素上方,然后用戶將其移入另一個(gè)元素時(shí)觸發(fā)。又移入的另一個(gè)元素可能位于前一個(gè)元素的外部,也可能是該元素的子元素。
三、兩對(duì)鼠標(biāo)事件的區(qū)別
其中,mouseover觸發(fā)優(yōu)先級(jí)高于mouseenter,mouseout觸發(fā)優(yōu)先級(jí)高于mouseleave
1、mouseover 和 mouseout
不論鼠標(biāo)指針穿過被選元素或其子元素,都會(huì)觸發(fā) mouseover
不論鼠標(biāo)指針離開被選元素還是任何子元素,都會(huì)觸發(fā) mouseout 事件。
是根據(jù)鼠標(biāo)事件的target進(jìn)行觸發(fā)的,是一種精確觸發(fā)。當(dāng)為某一組件(如div)設(shè)置這兩個(gè)事件時(shí),當(dāng)事件的target是該組件時(shí),就會(huì)觸發(fā)mouseover,但是當(dāng)鼠標(biāo)劃到該組件的子組件上時(shí),因?yàn)閠arget改變了,所以就觸發(fā)了 mouseout 事件,這往往就會(huì)造成頁(yè)面元素的閃爍,反復(fù)觸發(fā)移入移出事件。
2、mouseenter 和 mouseleave
只有在鼠標(biāo)指針從元素外穿入被選元素(到元素內(nèi))時(shí),才會(huì)觸發(fā) mouseenter 事件。
只有在鼠標(biāo)指針從元素內(nèi)穿出被選元素(到元素外)時(shí),才會(huì)觸發(fā) mouseleave 事件。
mouseenter 和 mouseleave是根據(jù)組件在頁(yè)面的范圍(坐標(biāo))進(jìn)行觸發(fā)的。不管組件中是否有子組件,只要鼠標(biāo)進(jìn)入到組件的范圍內(nèi),就可以觸發(fā)mouseenter事件,離開范圍,則觸發(fā)mouseleave事件。
總結(jié)一下:
在實(shí)際開發(fā)過程中,更多的是針對(duì)范圍的操作。如果鼠標(biāo)在某個(gè)組件(如div)范圍內(nèi)就觸發(fā)進(jìn)入組件的操作,如果離開這個(gè)組件的頁(yè)面范圍,就觸發(fā)離開的事件。
所以,一般情況下都不推薦使用mouseover與mouseout 最好使用mouseleave 與 mouseenter
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于vue-ssr的靜態(tài)網(wǎng)站生成器VuePress 初體驗(yàn)
VuePress為每一個(gè)由它生成的頁(yè)面提供預(yù)加載的html,不僅加載速度極佳,同時(shí)對(duì)seo非常友好。這篇文章主要介紹了基于vue-ssr的靜態(tài)網(wǎng)站生成器VuePress 初體驗(yàn),需要的朋友可以參考下2018-04-04vue可視化大屏實(shí)現(xiàn)無線滾動(dòng)列表飛入效果
本文主要介紹了vue可視化大屏實(shí)現(xiàn)無線滾動(dòng)列表飛入效果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域(rectangle marker)的方法
這篇文章主要介紹了vue實(shí)現(xiàn)一個(gè)矩形標(biāo)記區(qū)域 rectangle marker的方法,幫助大家實(shí)現(xiàn)區(qū)域標(biāo)記功能,感興趣的朋友可以了解下2020-10-10vue自定義組件如何通過v-model指令控制組件的隱藏、顯示
這篇文章主要介紹了vue自定義組件如何通過v-model指令控制組件的隱藏、顯示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05vue2.0+vue-router構(gòu)建一個(gè)簡(jiǎn)單的列表頁(yè)的示例代碼
這篇文章主要介紹了vue2.0+vue-router構(gòu)建一個(gè)簡(jiǎn)單的列表頁(yè)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02Vue enter回車導(dǎo)致頁(yè)面刷新問題及解決
這篇文章主要介紹了Vue enter回車導(dǎo)致頁(yè)面刷新問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10