|
|
- # 暗色主题使用指南
-
- 本文档介绍如何在项目中使用暗色主题功能。
-
- ## 概述
-
- 我们的应用支持白天/黑夜两种主题模式,用户可以根据自己的偏好切换。主题的状态保存在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
- <template>
- <ThemeProvider>
- <!-- 您的组件内容 -->
- <view class="my-content">
- 这里的内容会自动响应主题变化
- </view>
- </ThemeProvider>
- </template>
-
- <script>
- import ThemeProvider from '@/components/theme/ThemeProvider.vue'
-
- export default {
- components: {
- ThemeProvider
- }
- }
- </script>
- ```
-
- #### DarkModeStyles
-
- DarkModeStyles是一个提供通用暗色主题样式的无渲染组件,可以导入到您的页面中使用:
-
- ```html
- <template>
- <view>
- <!-- 这里不会渲染任何内容,但会应用样式 -->
- <DarkModeStyles />
-
- <!-- 您的组件内容 -->
- <view class="card">
- <view class="card-title">标题</view>
- <view class="card-content">内容</view>
- </view>
- </view>
- </template>
-
- <script>
- import DarkModeStyles from '@/components/theme/DarkModeStyles.vue'
-
- export default {
- components: {
- DarkModeStyles
- }
- }
- </script>
- ```
-
- ## 可用的主题变量
-
- 以下是在`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;
- ```
-
- ## 注意事项
-
- - 当用户切换主题时,会立即应用新的主题并保存到本地存储中
- - 主题状态在整个应用中共享,任何组件都可以访问和修改它
- - 对于复杂的组件,考虑分别定义亮色和暗色两套图标或图片资源
|