当前位置:首页 > VUE

vue实现收藏样式

2026-03-28 12:51:22VUE

实现收藏样式的基本思路

在Vue中实现收藏功能通常需要结合图标切换和状态管理。通过点击事件切换收藏状态,同时更新UI样式。

使用Font Awesome图标库

安装Font Awesome依赖:

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

在组件中引入并设置:

import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { faHeart as solidHeart } from '@fortawesome/free-solid-svg-icons'
import { faHeart as regularHeart } from '@fortawesome/free-regular-svg-icons'

export default {
  components: {
    FontAwesomeIcon
  },
  data() {
    return {
      isFavorited: false,
      solidHeart,
      regularHeart
    }
  }
}

模板中使用动态图标:

<font-awesome-icon 
  :icon="isFavorited ? solidHeart : regularHeart" 
  @click="isFavorited = !isFavorited"
  class="favorite-icon"
  :class="{ 'active': isFavorited }"
/>

使用Element UI的图标

安装Element UI:

vue实现收藏样式

npm install element-ui

在main.js中引入:

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

组件中使用:

<el-button 
  :icon="isFavorited ? 'el-icon-star-on' : 'el-icon-star-off'" 
  @click="toggleFavorite"
  :class="{ 'favorited': isFavorited }"
></el-button>

自定义CSS样式

添加过渡效果和颜色变化:

vue实现收藏样式

.favorite-icon {
  font-size: 24px;
  cursor: pointer;
  transition: all 0.3s ease;
}

.favorite-icon:hover {
  transform: scale(1.1);
}

.favorite-icon.active {
  color: #ff4d4f;
}

.el-button.favorited {
  color: #ff4d4f;
}

结合Vuex管理状态

对于全局收藏状态,可以使用Vuex:

// store.js
export default new Vuex.Store({
  state: {
    favorites: []
  },
  mutations: {
    TOGGLE_FAVORITE(state, itemId) {
      const index = state.favorites.indexOf(itemId)
      if (index === -1) {
        state.favorites.push(itemId)
      } else {
        state.favorites.splice(index, 1)
      }
    }
  }
})

组件中使用:

<template>
  <div @click="toggleFavorite(item.id)">
    <i :class="['icon', isFavorited(item.id) ? 'active' : '']"></i>
  </div>
</template>

<script>
export default {
  methods: {
    toggleFavorite(id) {
      this.$store.commit('TOGGLE_FAVORITE', id)
    },
    isFavorited(id) {
      return this.$store.state.favorites.includes(id)
    }
  }
}
</script>

动画效果实现

使用Vue的transition组件实现点击动画:

<transition name="bounce">
  <i 
    v-if="isFavorited"
    class="fas fa-heart"
    @click="toggleFavorite"
    style="color: red;"
  ></i>
  <i 
    v-else
    class="far fa-heart"
    @click="toggleFavorite"
  ></i>
</transition>

添加CSS动画:

.bounce-enter-active {
  animation: bounce-in 0.5s;
}
.bounce-leave-active {
  animation: bounce-in 0.5s reverse;
}
@keyframes bounce-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(1);
  }
}

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

相关文章

vue实现样式隔离

vue实现样式隔离

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

vue实现禁用样式

vue实现禁用样式

Vue 中禁用样式的方法 在 Vue 项目中,可以通过多种方式实现禁用样式。以下是几种常见的方法: 动态绑定 class 或 style 通过 Vue 的 v-bind 动态绑定 class 或…

vue实现样式添加

vue实现样式添加

内联样式绑定 在Vue中可以通过v-bind:style或简写:style直接绑定内联样式。对象语法中,CSS属性名可以用驼峰式(camelCase)或短横线分隔(kebab-case,需用引号括起)…

react项目如何用js改样式

react项目如何用js改样式

使用内联样式 在React中,可以直接通过JavaScript对象定义样式,并将其传递给元素的style属性。样式属性需要使用驼峰命名法(如backgroundColor而非background-co…

css3制作时钟样式

css3制作时钟样式

使用CSS3制作时钟样式 制作一个CSS3时钟样式可以通过伪元素、动画和变换来实现。以下是一个完整的实现方法: HTML结构 <div class="clock"> <div…

css制作样式

css制作样式

CSS 样式制作方法 CSS(层叠样式表)用于控制网页的样式和布局。以下是几种常见的 CSS 样式制作方法。 内联样式 直接在 HTML 元素的 style 属性中编写 CSS 规则。 <p…