当前位置:首页 > 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 实体符号实现简单收藏样式:

vue实现收藏样式

<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 动画效果

vue实现收藏样式

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

<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 中:

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)
      }
    }
  }
})

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

相关文章

网页制作 css样式

网页制作 css样式

CSS样式基础 CSS(层叠样式表)用于控制网页的视觉呈现,包括布局、颜色、字体等。以下是核心概念和常用方法: 选择器与样式规则 CSS通过选择器匹配HTML元素并应用样式。常见选择器类型:…

vue实现样式隔离

vue实现样式隔离

Vue 实现样式隔离的方法 Vue 提供了多种方式实现组件级别的样式隔离,避免全局样式污染。以下是常见的解决方案: Scoped CSS 在单文件组件(SFC)的 <style> 标签中…

vue实现动态绑定样式

vue实现动态绑定样式

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

vue实现多选添加样式

vue实现多选添加样式

Vue 实现多选添加样式的方法 在 Vue 中实现多选并添加样式可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-for 和 v-model 结合 通过 v-for 渲染列表项,结合 v-…

react组件内如何引入全局样式

react组件内如何引入全局样式

引入全局样式的几种方法 在React项目中引入全局样式有多种方式,以下列举常见且实用的方法: 方法1:通过index.js或App.js直接导入CSS文件 在项目入口文件(如src/index.j…

React中js如何添加元素样式

React中js如何添加元素样式

添加行内样式 在React中可以通过style属性直接添加行内样式,需要传递一个JavaScript对象。对象的属性名采用驼峰命名法,例如backgroundColor而非background-col…