鼠标悬停时仅显示当前卡片悬停效果

Posted

技术标签:

【中文标题】鼠标悬停时仅显示当前卡片悬停效果【英文标题】:on mouseover show only current card hover effect 【发布时间】:2021-07-03 00:07:39 【问题描述】:

。 目前,如果我的鼠标移到卡片上,那么它会显示每张卡片的效果。

这在 Vue Nuxtjs 中怎么可能?

我想要达到的就是这个。如果鼠标打开则开始播放 gif,如果鼠标关闭则显示静态图像。

我的代码:

<div v-b-hover="handleHover" class="team-img">
  <img
    v-if="isHovered"
    :srcset="member.node.teamMemberFields.imageGif"
  />
  <img v-else :srcset="member.node.teamMemberFields.image.srcSet" />
</div>

脚本代码:

import gql from 'graphql-tag'
export default 
  data() 
    return 
      isHovered: false,
    
  ,
  methods: 
    handleHover(hovered) 
      this.isHovered = hovered
    ,
  ,
...

【问题讨论】:

【参考方案1】:

使用 javascript onmouseoveronmouseleave 事件。 使用 Vue 语法可以写成v-on:mouseover@mouseover

<div @mouseover="isHovered = true" @mouseleave="isHovered = false" class="team-img">
  <img
    v-show="isHovered"
    :srcset="member.node.teamMemberFields.imageGif"
  />
  <img v-show="!isHovered" :srcset="member.node.teamMemberFields.image.srcSet" />
</div>

另外,我建议使用v-show 而不是v-if,因为在这种情况下它的性能会更好,因为元素可能会在运行时显示/隐藏多次。

【讨论】:

【参考方案2】:

您可以使用 v-forindex 来更改当前悬停项。在此示例中,只有一个悬停项的颜色可以更改为 red

<template>
  <template v-for="(item, index) in items" :key="item">
    <h3
      @mouseover=" isHovered = true; indexHover = index; "
      @mouseleave="isHovered = false"
      :style="isHovered && indexHover == index ? 'color:red' : ''"
    >
       item 
    </h3>
  </template>
</template>

<script>
export default 
  name: 'home',
  data() 
    return 
      items: ['item1', 'item2', 'item3'],
      isHovered: false,
      indexHover: null,
    ;
  ,

</script>

【讨论】:

以上是关于鼠标悬停时仅显示当前卡片悬停效果的主要内容,如果未能解决你的问题,请参考以下文章

鼠标悬停后如何突出显示字符?

鼠标悬停时元素移动

css如何实现鼠标悬停的提示效果

HTML+CSS制作鼠标悬停效果

HTML图片鼠标悬停效果设置!

display属性 鼠标悬停时显示隐藏内容,