当前位置:首页 > VUE

vue实现收藏样式

2026-03-08 02:29:25VUE

Vue 实现收藏样式

方法一:使用 Font Awesome 图标

安装 Font Awesome 依赖:

npm install @fortawesome/fontawesome-svg-core @fortawesome/free-solid-svg-icons @fortawesome/vue-fontawesome

在 Vue 组件中引入并使用:

<template>
  <div @click="toggleFavorite">
    <font-awesome-icon :icon="isFavorite ? 'fas fa-star' : 'far fa-star'" />
  </div>
</template>

<script>
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { faStar } from '@fortawesome/free-solid-svg-icons'
import { faStar as farStar } from '@fortawesome/free-regular-svg-icons'

export default {
  components: {
    FontAwesomeIcon
  },
  data() {
    return {
      isFavorite: false,
      fas: {
        faStar
      },
      far: {
        farStar
      }
    }
  },
  methods: {
    toggleFavorite() {
      this.isFavorite = !this.isFavorite
    }
  }
}
</script>

方法二:使用 Unicode 字符

直接使用 HTML 实体符号实现简单收藏样式:

<template>
  <div @click="toggleFavorite" class="favorite">
    {{ isFavorite ? '★' : '☆' }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      isFavorite: false
    }
  },
  methods: {
    toggleFavorite() {
      this.isFavorite = !this.isFavorite
    }
  }
}
</script>

<style>
.favorite {
  font-size: 24px;
  color: gold;
  cursor: pointer;
}
</style>

方法三:自定义 SVG 图标

创建可自定义的 SVG 收藏图标:

<template>
  <div @click="toggleFavorite" class="favorite">
    <svg width="24" height="24" viewBox="0 0 24 24">
      <path 
        :fill="isFavorite ? 'gold' : 'none'" 
        stroke="gold" 
        stroke-width="1.5"
        d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"
      />
    </svg>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isFavorite: false
    }
  },
  methods: {
    toggleFavorite() {
      this.isFavorite = !this.isFavorite
    }
  }
}
</script>

<style>
.favorite {
  cursor: pointer;
}
</style>

方法四:使用 CSS 动画效果

为收藏添加点击动画效果:

<template>
  <div 
    @click="toggleFavorite" 
    :class="['favorite', { 'active': isFavorite }]"
  >
    <span class="star">★</span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isFavorite: false
    }
  },
  methods: {
    toggleFavorite() {
      this.isFavorite = !this.isFavorite
    }
  }
}
</script>

<style>
.favorite {
  display: inline-block;
  font-size: 24px;
  cursor: pointer;
  transition: all 0.3s;
}

.favorite .star {
  color: #ccc;
  transition: all 0.3s;
}

.favorite.active .star {
  color: gold;
  transform: scale(1.2);
  text-shadow: 0 0 5px rgba(255, 215, 0, 0.5);
}
</style>

方法五:结合 Vuex 状态管理

当需要全局管理收藏状态时:

<template>
  <div @click="toggleFavorite">
    <font-awesome-icon :icon="isFavorite(itemId) ? 'fas fa-star' : 'far fa-star'" />
  </div>
</template>

<script>
import { mapGetters, mapMutations } from 'vuex'

export default {
  props: ['itemId'],
  computed: {
    ...mapGetters(['isFavorite'])
  },
  methods: {
    ...mapMutations(['toggleFavorite'])
  }
}
</script>

在 Vuex store 中:

vue实现收藏样式

export default new Vuex.Store({
  state: {
    favorites: []
  },
  getters: {
    isFavorite: state => itemId => state.favorites.includes(itemId)
  },
  mutations: {
    toggleFavorite(state, itemId) {
      const index = state.favorites.indexOf(itemId)
      if (index === -1) {
        state.favorites.push(itemId)
      } else {
        state.favorites.splice(index, 1)
      }
    }
  }
})

标签: 样式收藏
分享给朋友:

相关文章

css3制作时钟样式

css3制作时钟样式

CSS3 制作时钟样式 使用 CSS3 可以创建一个美观且动态的时钟样式,结合 transform 和 animation 属性实现指针的旋转效果。 HTML 结构 时钟的基本 HTML 结构包括一…

修改elementui的样式

修改elementui的样式

修改 ElementUI 样式的方法 通过全局样式覆盖 在项目的全局样式文件(如 App.vue 或 main.css)中直接覆盖 ElementUI 的默认样式。需确保选择器优先级高于默认样式,可通…

vue实现样式切换

vue实现样式切换

Vue 样式切换实现方法 动态 class 绑定 通过 v-bind:class 或简写 :class 实现动态样式切换,适用于需要根据条件切换多个 class 的场景: <template&…

vue实现表格样式

vue实现表格样式

Vue 实现表格样式的方法 在 Vue 中实现表格样式可以通过多种方式完成,包括使用原生 HTML 表格、第三方组件库或自定义样式。以下是几种常见的方法: 使用原生 HTML 表格 通过 Vue 的…

vue实现动态绑定样式

vue实现动态绑定样式

动态绑定样式的方法 在Vue中实现动态绑定样式主要通过v-bind:class和v-bind:style指令完成,支持对象语法、数组语法等多种灵活方式。 对象语法 通过对象可以动态切换class,对…

vue卡片样式切换实现

vue卡片样式切换实现

实现 Vue 卡片样式切换的方法 使用动态类绑定 通过 v-bind:class 或简写 :class 动态切换类名,结合条件判断实现样式切换。例如: <template> <…