vue?鼠標移入移出(hover)切換顯示圖片問題
鼠標移入移出(hover)切換顯示圖片
css實現(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實現(xiàn)
使用一個變量來表示鼠標移入或移出的狀態(tài),鼠標移入事件mouseenter,移出事件mouseleave,在這兩個事件中來修改這個變量。
注意:移出事件別用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,//是否懸浮到圖標上vue鼠標移入移出事件注意事項
發(fā)生冒泡事件
今天在寫一個鼠標的移入移出的事件,使用mouseout和mouseover期間,踩了一個大坑,經(jīng)過半天的排查,終于發(fā)現(xiàn)是發(fā)生了冒泡事件。
把mouseout和mouseover綁在父元素上,移過父元素和子元素都會觸發(fā)。即子元素mouseover和mouseout事件會冒泡至父元素
一、解決方法
使用 mouseenter 和 mouseleave 事件。
這兩個事件是根據(jù)組件在頁面上的范圍進行計算的,只要在某個組件上添加了這兩個事件,會計算鼠標的位置,只要在組件范圍內(nèi),就可以觸發(fā)。
二、定義
1、mouseenter:在鼠標光標從元素外部首次移動到元素范圍之內(nèi)時觸發(fā),這個事件不冒泡。
2、mouseleave:在位于元素上方的鼠標光標移動到元素范圍之外時觸發(fā),這個事件不冒泡。
3、mouseover:在鼠標指針位于一個元素外部,然后用戶將其首次移入另一個元素邊界之內(nèi)時觸發(fā)。
4、mouseout:在鼠標指針位于一個元素上方,然后用戶將其移入另一個元素時觸發(fā)。又移入的另一個元素可能位于前一個元素的外部,也可能是該元素的子元素。
三、兩對鼠標事件的區(qū)別
其中,mouseover觸發(fā)優(yōu)先級高于mouseenter,mouseout觸發(fā)優(yōu)先級高于mouseleave
1、mouseover 和 mouseout
不論鼠標指針穿過被選元素或其子元素,都會觸發(fā) mouseover
不論鼠標指針離開被選元素還是任何子元素,都會觸發(fā) mouseout 事件。
是根據(jù)鼠標事件的target進行觸發(fā)的,是一種精確觸發(fā)。當為某一組件(如div)設(shè)置這兩個事件時,當事件的target是該組件時,就會觸發(fā)mouseover,但是當鼠標劃到該組件的子組件上時,因為target改變了,所以就觸發(fā)了 mouseout 事件,這往往就會造成頁面元素的閃爍,反復觸發(fā)移入移出事件。
2、mouseenter 和 mouseleave
只有在鼠標指針從元素外穿入被選元素(到元素內(nèi))時,才會觸發(fā) mouseenter 事件。
只有在鼠標指針從元素內(nèi)穿出被選元素(到元素外)時,才會觸發(fā) mouseleave 事件。
mouseenter 和 mouseleave是根據(jù)組件在頁面的范圍(坐標)進行觸發(fā)的。不管組件中是否有子組件,只要鼠標進入到組件的范圍內(nèi),就可以觸發(fā)mouseenter事件,離開范圍,則觸發(fā)mouseleave事件。
總結(jié)一下:

在實際開發(fā)過程中,更多的是針對范圍的操作。如果鼠標在某個組件(如div)范圍內(nèi)就觸發(fā)進入組件的操作,如果離開這個組件的頁面范圍,就觸發(fā)離開的事件。
所以,一般情況下都不推薦使用mouseover與mouseout 最好使用mouseleave 與 mouseenter
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue中element 的upload組件發(fā)送請求給后端操作
這篇文章主要介紹了vue中element 的upload組件發(fā)送請求給后端操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
關(guān)于Vue在ie10下空白頁的debug小結(jié)
這篇文章主要給大家介紹了關(guān)于Vue在ie10下空白頁的debug相關(guān)資料,這是最近在工作中遇到的一個問題,通過查找相關(guān)的資料終于解決了,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2018-05-05
vue中的路由傳值與重調(diào)本路由改變參數(shù)
這篇文章主要介紹了vue中的路由傳值與重調(diào)本路由改變參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
elementui的table根據(jù)是否符合需求合并列的實現(xiàn)代碼
這篇文章主要介紹了elementui的table根據(jù)是否符合需求合并列的實現(xiàn)代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03
vue-cli與webpack處理靜態(tài)資源的方法及webpack打包的坑
這篇文章主要介紹了vue-cli與webpack處理靜態(tài)資源的方法,需要的朋友可以參考下2018-05-05

