当前位置:首页 > VUE

vue主题切换实现

2026-02-19 09:56:17VUE

实现 Vue 主题切换的方法

使用 CSS 变量动态切换主题

定义全局 CSS 变量,通过修改变量值实现主题切换。在根元素(如 :root)中定义主题相关变量:

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

.dark-theme {
  --primary-color: #646cff;
  --bg-color: #242424;
  --text-color: rgba(255, 255, 255, 0.87);
}

在 Vue 组件中通过 document.documentElement.classList 切换主题类:

vue主题切换实现

const toggleTheme = () => {
  document.documentElement.classList.toggle('dark-theme');
};

使用 Vuex/Pinia 管理主题状态

通过状态管理工具存储当前主题,结合计算属性动态应用样式:

// Pinia 示例
import { defineStore } from 'pinia';

export const useThemeStore = defineStore('theme', {
  state: () => ({
    isDark: false
  }),
  actions: {
    toggleTheme() {
      this.isDark = !this.isDark;
      document.documentElement.classList.toggle('dark-theme', this.isDark);
    }
  }
});

结合 Tailwind CSS 实现

配置 tailwind.config.js 启用暗色模式:

vue主题切换实现

module.exports = {
  darkMode: 'class',
  // ...
}

在模板中通过类名切换:

<button @click="toggleTheme">切换主题</button>
<div :class="{ 'dark': isDark }">
  <!-- 内容 -->
</div>

持久化主题选择

使用 localStorage 保存用户选择,避免刷新后重置:

const saveThemePreference = (isDark) => {
  localStorage.setItem('theme', isDark ? 'dark' : 'light');
};

const loadThemePreference = () => {
  return localStorage.getItem('theme') === 'dark';
};

完整组件示例

<template>
  <button @click="toggleTheme">
    {{ isDark ? '浅色模式' : '深色模式' }}
  </button>
</template>

<script setup>
import { ref, onMounted } from 'vue';

const isDark = ref(false);

const toggleTheme = () => {
  isDark.value = !isDark.value;
  document.documentElement.classList.toggle('dark-theme', isDark.value);
  localStorage.setItem('theme', isDark.value ? 'dark' : 'light');
};

onMounted(() => {
  const savedTheme = localStorage.getItem('theme');
  if (savedTheme === 'dark') {
    isDark.value = true;
    document.documentElement.classList.add('dark-theme');
  }
});
</script>

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

相关文章

vue公共列表的实现

vue公共列表的实现

实现 Vue 公共列表组件 公共列表组件通常用于展示重复结构的数据,例如商品列表、用户列表等。以下是一个典型的实现方式: 基础实现 创建可复用的列表组件 List.vue: <templ…

eventbus vue实现

eventbus vue实现

EventBus 实现原理 EventBus 是一种发布/订阅模式,用于 Vue 组件间的通信。核心是通过一个中央事件总线管理事件监听和触发。 创建 EventBus 在 Vue 项目中创建一个独…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实现…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } }…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…