vue使用v-for實(shí)現(xiàn)hover點(diǎn)擊效果
使用Vue來(lái)實(shí)現(xiàn)鼠標(biāo)懸停效果??梢允褂檬录幚砥鱲-on指令(簡(jiǎn)寫為:@)來(lái)完成。為標(biāo)簽綁定mouseenter以及mouseleave事件即可。
hover是css中的選擇器,用于選擇鼠標(biāo)指針浮動(dòng)在上面的元素。所以a:hover可用于設(shè)置當(dāng)鼠標(biāo)懸停在超鏈接之上時(shí)超鏈接的樣式。
在當(dāng)今比較流行的前端框架里 vue react 都是以數(shù)據(jù)驅(qū)動(dòng)的形式來(lái)修改元素的狀態(tài), 而并非是之前使用jq來(lái)操作dom元素, 這樣效率也是非常低的, 像vue, react 都是以虛擬dom的形式渲染頁(yè)面, 以數(shù)據(jù)的變化來(lái)更新虛擬dom, 從而更新頁(yè)面.

jquery 來(lái)實(shí)現(xiàn)
1.給li來(lái)綁定hover事件
@mouseover="hover(index)"
2.在hover函數(shù)內(nèi)去操作dom eq選中當(dāng)前hover的li去修改它的樣式, siblings()選中其他的li修改樣式
hover: function(index){
console.log(index);
$('ul li').eq(index).css({
'background': '#ccc',
'color': '#fff'
}).siblings().css({
'background': '#fff',
'color': '#333'
})
}
vue 利用不同的class名來(lái)實(shí)現(xiàn)
首先寫兩個(gè)不同狀態(tài)的樣式
.hoverBg{
background: #ccc;
color: #fff;
}
.clickBg{
background: red;
color: #fff;
}
然后給兩個(gè)狀態(tài)綁定兩個(gè)值
export default {
data: function(){
return {
itemArr:['A','B','C','D'],
hoverIndex: -1, //表示當(dāng)前hover的是第幾個(gè)li 初始為 -1 或 null 不能為0 0表示第一個(gè)li
clickIndex: -1, //表示當(dāng)前點(diǎn)擊的是第幾個(gè)li 初始為 -1 或 null 不能為0 0表示第一個(gè)li
}
},
}
hover的時(shí)候讓hoverIndex等于hover的li,點(diǎn)擊時(shí)候一樣
@mouseover="hoverIndex = index" @click="clickIndex = index"
鼠標(biāo)移出又取消移出狀態(tài) 即讓hover的li為 -1 或 null
@mouseout="hoverIndex = -1"
然后利用 hoverIndex 和 clickIndex 來(lái)給li不同的class名 實(shí)現(xiàn)效果
:class="{'clickBg':index==clickIndex,'hoverBg':index==hoverIndex}"
用的熟練了就可以做出更多的東西,不同li渲染不同的樣式
全部代碼如下:
<template>
<ul class="item">
<li v-for="(item, index) in itemArr" :key="index"
:class="{'clickBg':index==clickIndex,'hoverBg':index==hoverIndex}"
@click="clickIndex = index"
@mouseover="hoverIndex = index"
@mouseout="hoverIndex = -1">
{{item}}
</li>
</ul>
</template>
<script>
export default {
data: function(){
return {
itemArr:['A','B','C','D'],
hoverIndex: -1, //表示當(dāng)前hover的是第幾個(gè)li 初始為 -1 或 null 不能為0 0表示第一個(gè)li
clickIndex: -1, //表示當(dāng)前點(diǎn)擊的是第幾個(gè)li 初始為 -1 或 null 不能為0 0表示第一個(gè)li
}
},
}
</script>
<style>
.item{
width: 600px;
height: 60px;
}
.item li{
width: 80px;
height: 60px;
line-height: 60px;
margin-left: 20px;
float: left;
text-align: center;
cursor: pointer;
}
.hoverBg{
background: #ccc;
color: #fff;
}
.clickBg{
background: red;
color: #fff;
}
</style>
總結(jié)
以上所述是小編給大家介紹的vue使用v-for實(shí)現(xiàn)hover點(diǎn)擊效果,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
vuejs2.0子組件改變父組件的數(shù)據(jù)實(shí)例
本篇文章主要介紹了vuejs2.0子組件改變父組件的數(shù)據(jù)實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-05-05
VUE element上傳動(dòng)態(tài)設(shè)置action路徑和參數(shù)的坑及解決
這篇文章主要介紹了VUE element上傳動(dòng)態(tài)設(shè)置action路徑和參數(shù)的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Vue 項(xiàng)目代理設(shè)置的優(yōu)化
這篇文章主要介紹了Vue 項(xiàng)目代理設(shè)置的優(yōu)化功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04
vue+elementUI(el-upload)圖片壓縮,默認(rèn)同比例壓縮操作
這篇文章主要介紹了vue+elementUI(el-upload)圖片壓縮,默認(rèn)同比例壓縮操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-08-08
node.js開發(fā)輔助工具nodemon安裝與配置詳解
node.js代碼修改后,需要重新啟動(dòng) Express 應(yīng)用,所做的修改才能生效。若之后的每次代碼修改都要重復(fù)這樣的操作,勢(shì)必會(huì)影響開發(fā)效率,本文將詳細(xì)介紹Nodemon,它會(huì)監(jiān)測(cè)項(xiàng)目中的所有文件,一旦發(fā)現(xiàn)文件有改動(dòng),Nodemon 會(huì)自動(dòng)重啟應(yīng)用2020-02-02
Vue實(shí)現(xiàn)星級(jí)評(píng)價(jià)效果
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)星級(jí)評(píng)價(jià)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vuex + axios 做登錄驗(yàn)證 并且保存登錄狀態(tài)的實(shí)例
今天小編就為大家分享一篇vuex + axios 做登錄驗(yàn)證 并且保存登錄狀態(tài)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-09-09

