Im new to vuejs and I have problem. look my code
Template:
<div >
<ul>
<li v-for="game in games" : @mouseenter="isHover=true" @mouseleave="isHover=false">
<div >
<img :src="game.poster" :alt="game.title">
</div>
<transition name="show">
<div v-if="isHover">
<div >
<p>{{game.name}}</p>
</div>
<div >
<p>{{game.demo}}</p>
</div>
<div >
<a href="#">OPEN LINK</a>
</div>
</div>
</transition>
</li>
</ul>
</div>
Script:
// Library
import {ref} from "vue";
// Export
export default {
name: "GameBar",
setup()
{
let isHover=ref(false)
const games=ref([
{
name: 'RAINBOW SIX',
demo: 'Some Text Some Text Some Text Some Text Some Text Some Text',
poster: 'assets/home/media/game/3.jpg',
},{
name: 'PUBG',
demo: 'Some Text Some Text Some Text Some Text Some Text Some Text',
poster: 'assets/home/media/game/6.jpg',
}
])
return {
isHover,games
}
}
}
Style:
.component{
// Animation
.show-enter-active,.show-leave-active{
transition: all 0.2s ease;
}
.show-enter-to,.show-leave-from{
opacity: 1;
}
.show-enter-from,.show-leave-to{
opacity: 0;
top: 5px !important;
}
}
Now my problem is when mouse enter on li, all li transition work and show information class. I know its because of isHover
variable. but I don`t know how can I handle this like JQuery when using $(this).find(CHILD)
. I searched a lot but no solution found...
CodePudding user response:
Defined a property in the components data function, for example hoveredItem
, and then change @moueseenter
and @mouseleave
handlers to set this.hoveredItem
accordingly. Here's the code:
data() {
return {
hoveredItem: '',
};
},
<li
v-for="game in games"
:key="game.name"
:
@mouseenter="hoveredItem = game.name"
@mouseleave="hoveredItem = ''"
>
<!-- rest of the code -->
</li>