当前位置:首页 > VUE

vue实现主题切换

2026-01-18 11:10:56VUE

Vue 实现主题切换的方法

使用 CSS 变量动态切换主题

定义全局 CSS 变量,通过修改变量值实现主题切换。在 assets/css 目录下创建 theme.css

:root {
  --primary-color: #42b983;
  --bg-color: #ffffff;
  --text-color: #2c3e50;
}

.dark-theme {
  --primary-color: #1e88e5;
  --bg-color: #121212;
  --text-color: #ffffff;
}

在 Vue 组件中通过 document.documentElement.className 切换类名:

methods: {
  toggleTheme() {
    const htmlEl = document.documentElement
    htmlEl.className = htmlEl.className === 'dark-theme' ? '' : 'dark-theme'
  }
}

使用 Vuex 管理主题状态

安装 Vuex 并创建 store 管理主题状态:

// store/index.js
export default new Vuex.Store({
  state: {
    darkTheme: false
  },
  mutations: {
    toggleTheme(state) {
      state.darkTheme = !state.darkTheme
    }
  }
})

在组件中通过计算属性和方法切换主题:

computed: {
  isDarkTheme() {
    return this.$store.state.darkTheme
  }
},
methods: {
  toggleTheme() {
    this.$store.commit('toggleTheme')
    document.documentElement.className = this.isDarkTheme ? 'dark-theme' : ''
  }
}

使用第三方库 vue-theme-switcher

安装主题切换库:

npm install vue-theme-switcher

在 main.js 中引入并配置:

import ThemeSwitcher from 'vue-theme-switcher'
Vue.use(ThemeSwitcher, {
  themes: {
    light: {
      primary: '#42b983',
      background: '#ffffff'
    },
    dark: {
      primary: '#1e88e5',
      background: '#121212'
    }
  }
})

在组件中使用:

this.$theme.set('dark')  // 切换至暗色主题
this.$theme.set('light') // 切换至亮色主题

持久化主题选择

使用 localStorage 保存用户选择的主题:

vue实现主题切换

methods: {
  toggleTheme() {
    const newTheme = this.isDarkTheme ? 'light' : 'dark'
    localStorage.setItem('user-theme', newTheme)
    this.$store.commit('toggleTheme')
    document.documentElement.className = newTheme === 'dark' ? 'dark-theme' : ''
  }
},
created() {
  const savedTheme = localStorage.getItem('user-theme')
  if (savedTheme) {
    this.$store.commit('setTheme', savedTheme === 'dark')
    document.documentElement.className = savedTheme === 'dark' ? 'dark-theme' : ''
  }
}

标签: 主题vue
分享给朋友:

相关文章

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…

vue列表实现

vue列表实现

Vue 列表实现方法 使用 v-for 指令 v-for 是 Vue 中用于渲染列表的核心指令,基于数据源动态生成 DOM 元素。语法格式为 item in items 或 (item, index)…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…