基于vue中對(duì)鼠標(biāo)劃過(guò)事件的處理方式詳解
鼠標(biāo)事件進(jìn)行監(jiān)聽(tīng)
需求中,在一個(gè)table(組件)表中,對(duì)于其中一列(該列為圖片列),當(dāng)鼠標(biāo)劃過(guò)該列的某個(gè)單元格子(圖片)時(shí),需要展示出該單元格子對(duì)應(yīng)的遮罩層
翻閱了一些博客,發(fā)現(xiàn)好多都提到了mouse事件,如mouseover、mouseout、mouseenter、mouseleave,在之后我自己也通過(guò)這種方法進(jìn)行了嘗試。
<template>
<el-table
:data="tableData"
stripe
style="width: 100%">
<el-table-column
prop="pic"
label="圖片"
width="180">
<template slot-scope="scope">
<div slot="wrapper" class="name-wrapper">
<div class="img-mask" @click="toShowDialog(props.row)" :ref="'mask' + props.rowIndex">文字</div>
<div @mouseover="changeMask(props.rowIndex)" @mouseout="changeMask(props.rowIndex)">
<img src="...">
</div>
</div>
</template>
</el-table-column>
</el-table>
</template>
...
changeMask(index) {
let vm = this;
let mask = vm.$refs['mask' + index];
if(mask.style.display == 'none') {
mask.style.display = 'block';
}else {
mask.style.display = 'none';
}
}
最后在查看結(jié)果中發(fā)現(xiàn),在劃過(guò)的時(shí)候是會(huì)觸發(fā)鼠標(biāo)事件,但是會(huì)出現(xiàn)閃動(dòng)的清空,當(dāng)鼠標(biāo)一直放在該單元格上的時(shí)候,遮罩層也會(huì)消失和出現(xiàn)反復(fù)切換。為緩解這種情況,還對(duì)changeMask中的顯示和隱藏進(jìn)行setTimeout延時(shí),結(jié)果并不理想,不推薦這樣使用。
CSS方式實(shí)現(xiàn)
這種方法,只需要保留上面代碼中的主體部分,不需要ref和mouse事件這些,主要是通過(guò)opacity去控制遮罩層的顯示和隱藏的。具體的樣式代碼如下:
.wrapper {
position: relative;
.img-mask {
position: absolute;
background: rgba(0, 0, 0, 0.5);
z-index: 10;
//設(shè)置left、right、top、bottom的原因是使得遮罩層上的文字顯示在該層的最中間
left: 0;
right: 0;
top: 0;
bottom: 0;
//透明度為0,則就是不可見(jiàn)
opacity: 0;
}
&:hover {
.img-mask {
opacity: 1;
}
}
}
這種方法達(dá)到了預(yù)期的效果,體驗(yàn)也很好,推薦使用。
table中動(dòng)態(tài)ref
首先,這部分并不是針對(duì)遮罩層顯示隱藏的,而是處理表格中某一列或者很多單元格添加ref的。這個(gè)其實(shí)在第一種方法中就已經(jīng)也出來(lái)了,現(xiàn)在做下總結(jié)。
:ref="'mask' + props.rowIndex"這種方法對(duì)例如表格這樣一列中的每個(gè)單元格都對(duì)應(yīng)著一個(gè)附加的東西,而這些東西的位置又是不同的,可以實(shí)現(xiàn)對(duì)每個(gè)單元格進(jìn)行ref綁定,在事件處理函數(shù)中,通過(guò)傳遞props.rowIndex得到下標(biāo),最終通過(guò)this.$ref['mask' + props.rowIndex]得到對(duì)應(yīng)的元素,然后對(duì)其css進(jìn)行相關(guān)控制(只是舉例)。
拓展知識(shí):vue鼠標(biāo)劃過(guò)移入移出觸發(fā)函數(shù)介紹
如下所示:
<ul>> <li class="" v-on:mouseover="changeActive($event)" v-on:mouseout="removeActive($event)"></li> </ul>
methods:{
// 鼠標(biāo)移入加入class
changeActive($event){
$event.currentTarget.className="active";
},
removeActive($event){
$event.currentTarget.className="";
}
}
以上這篇基于vue中對(duì)鼠標(biāo)劃過(guò)事件的處理方式詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue+mousemove實(shí)現(xiàn)鼠標(biāo)拖動(dòng)功能(拖動(dòng)過(guò)快失效問(wèn)題解決方法)
- vue鼠標(biāo)懸停事件實(shí)例詳解
- vue實(shí)現(xiàn)組件跟隨鼠標(biāo)位置彈出效果(示例代碼)
- vue實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)顯示懸浮框效果
- vue自定義指令添加跟隨鼠標(biāo)光標(biāo)提示框v-tooltip方式
- 如何利用 vue實(shí)現(xiàn)鼠標(biāo)懸停時(shí)顯示元素或文本
- Vue中常用的鼠標(biāo)移入移出事件詳解
- 利用Vue3實(shí)現(xiàn)鼠標(biāo)跟隨效果
- 使用Vue3實(shí)現(xiàn)簡(jiǎn)單的鼠標(biāo)跟隨效果
- vue3實(shí)現(xiàn)鼠標(biāo)跟隨傾斜動(dòng)態(tài)效果實(shí)例
相關(guān)文章
在vue中實(shí)現(xiàn)antd的動(dòng)態(tài)主題的代碼示例
在需求開(kāi)發(fā)階段,鑒于項(xiàng)目采用了antd作為基礎(chǔ)組件庫(kù),確保組件外觀與antd一致變得尤為重要,這包括顏色、字體大小及尺寸等樣式的統(tǒng)一,然而,截至當(dāng)前antd-vue尚未實(shí)現(xiàn)這一便捷的CSS變量特性,但理解其背后的實(shí)現(xiàn)機(jī)制后,我們可以自行構(gòu)建這一功能,需要的朋友可以參考下2024-07-07
vue 路由頁(yè)面之間實(shí)現(xiàn)用手指進(jìn)行滑動(dòng)的方法
下面小編就為大家分享一篇vue 路由頁(yè)面之間實(shí)現(xiàn)用手指進(jìn)行滑動(dòng)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨跟隨小編過(guò)來(lái)看看吧2018-02-02
在組件中修改vuex中state的具體實(shí)現(xiàn)方法
在組件中修改 Vuex 中的 state,根據(jù)使用的 Vue 版本(Vue 2 或 Vue 3)不同,有不同的操作方式,但總體思路都是借助 Vuex 提供的 mutations 或 actions 來(lái)實(shí)現(xiàn),以下分別介紹兩種版本下的具體實(shí)現(xiàn)方法,需要的朋友可以參考下2025-02-02
關(guān)于Element-ui中Table表格無(wú)法顯示的問(wèn)題及解決
這篇文章主要介紹了關(guān)于Element-ui中Table表格無(wú)法顯示的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue彈出的添加信息組件中el-radio單選框無(wú)法點(diǎn)擊的解決方案
在彈出的添加信息組件中,單選框無(wú)法切換是因?yàn)闆](méi)有默認(rèn)值,通過(guò)判斷初始化時(shí)的值并賦初始值,雖然實(shí)現(xiàn)了初始值的展示,但導(dǎo)致單選框無(wú)法切換,為了解決這個(gè)問(wèn)題,更改了上級(jí)組件傳值的方式,直接帶參傳值,避免了對(duì)象處理2026-03-03
vue3獲取ref實(shí)例結(jié)合ts的InstanceType問(wèn)題
這篇文章主要介紹了vue3獲取ref實(shí)例結(jié)合ts的InstanceType問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
vue單文件組件lint error自動(dòng)fix與styleLint報(bào)錯(cuò)自動(dòng)fix詳解
這篇文章主要給大家介紹了關(guān)于vue單文件組件lint error自動(dòng)fix與styleLint報(bào)錯(cuò)自動(dòng)fix的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01

