当前位置:首页 > 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 管理主题状态:

vue实现主题切换

// 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

安装主题切换库:

vue实现主题切换

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 保存用户选择的主题:

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.js 作为前端框架,非常适合实现前后端分离的开发模式。 核心实现步骤 创建 Vue 项目 使…

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$route…

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted 和…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置…

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过结构调整实现 MVC(Model-View-Controller)模式。以下是具体实…