# 暗色主题使用指南 本文档介绍如何在项目中使用暗色主题功能。 ## 概述 我们的应用支持白天/黑夜两种主题模式,用户可以根据自己的偏好切换。主题的状态保存在Vuex中,并且会持久化保存在本地存储中,以便下次打开应用时恢复用户的偏好设置。 ## 使用方法 ### 1. 在组件中使用主题混入器 我们提供了一个方便的混入器,可以轻松地在任何组件中使用主题相关的功能: ```js // 1. 导入主题混入器 import themeMixin from '@/mixins/themeMode.js' export default { // 2. 在组件中注册混入器 mixins: [themeMixin], methods: { someMethod() { // 3. 直接使用混入器提供的属性和方法 console.log(this.isDarkMode) // 是否为暗色模式 console.log(this.currentTheme) // 当前主题模式:'light'或'dark' // 切换主题 this.toggleThemeMode() // 设置为特定主题 this.setThemeMode('dark') // 或 'light' } } } ``` ### 2. 为组件添加暗色主题样式 我们在`uni.scss`中定义了一系列暗色主题相关的变量,您可以在组件的样式中使用这些变量: ```scss /* 示例组件的样式 */ .my-component { background-color: #fff; color: #333; /* 添加主题过渡效果 */ @extend .theme-transition; /* 定义暗色主题下的样式 */ .dark-mode & { background-color: $dark-bg-color; color: $dark-text-color-primary; } } ``` ### 3. 使用主题组件 我们还提供了两个便捷的组件: #### ThemeProvider ThemeProvider是一个包装组件,它会自动传递当前的主题模式,并提供暗色主题的根容器: ```html ``` #### DarkModeStyles DarkModeStyles是一个提供通用暗色主题样式的无渲染组件,可以导入到您的页面中使用: ```html ``` ## 可用的主题变量 以下是在`uni.scss`中定义的暗色主题相关变量,您可以在组件样式中使用: ```scss /* 背景色 */ $dark-bg-color: #1a1a1a; // 主背景色 $dark-bg-color-secondary: #222; // 次要背景色 $dark-bg-color-tertiary: #333; // 第三级背景色 /* 文本颜色 */ $dark-text-color-primary: #eee; // 主要文本颜色 $dark-text-color-secondary: #bbb; // 次要文本颜色 $dark-text-color-tertiary: #999; // 第三级文本颜色 /* 边框和阴影 */ $dark-border-color: #444; // 边框颜色 $dark-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.2); // 阴影 /* 强调色 */ $dark-accent-color: #4a90e2; // 强调色 /* 过渡动画时间 */ $theme-transition-duration: 0.3s; // 主题切换过渡时间 ``` ## 最佳实践 1. 总是为可能受主题影响的元素添加`theme-transition`类,以确保主题切换时有平滑的过渡效果 2. 使用预定义的变量而不是硬编码颜色值,以保持整个应用的视觉一致性 3. 在设计组件时考虑两种主题模式,确保在暗色模式下内容仍然清晰可见 4. 对于特定于组件的变量,可以基于全局主题变量派生: ```scss $my-component-bg: $dark-bg-color; $my-component-text: $dark-text-color-primary; ``` ## 注意事项 - 当用户切换主题时,会立即应用新的主题并保存到本地存储中 - 主题状态在整个应用中共享,任何组件都可以访问和修改它 - 对于复杂的组件,考虑分别定义亮色和暗色两套图标或图片资源