小说小程序前端代码仓库(小程序)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
4.1 KiB

  1. # 暗色主题使用指南
  2. 本文档介绍如何在项目中使用暗色主题功能。
  3. ## 概述
  4. 我们的应用支持白天/黑夜两种主题模式,用户可以根据自己的偏好切换。主题的状态保存在Vuex中,并且会持久化保存在本地存储中,以便下次打开应用时恢复用户的偏好设置。
  5. ## 使用方法
  6. ### 1. 在组件中使用主题混入器
  7. 我们提供了一个方便的混入器,可以轻松地在任何组件中使用主题相关的功能:
  8. ```js
  9. // 1. 导入主题混入器
  10. import themeMixin from '@/mixins/themeMode.js'
  11. export default {
  12. // 2. 在组件中注册混入器
  13. mixins: [themeMixin],
  14. methods: {
  15. someMethod() {
  16. // 3. 直接使用混入器提供的属性和方法
  17. console.log(this.isDarkMode) // 是否为暗色模式
  18. console.log(this.currentTheme) // 当前主题模式:'light'或'dark'
  19. // 切换主题
  20. this.toggleThemeMode()
  21. // 设置为特定主题
  22. this.setThemeMode('dark') // 或 'light'
  23. }
  24. }
  25. }
  26. ```
  27. ### 2. 为组件添加暗色主题样式
  28. 我们在`uni.scss`中定义了一系列暗色主题相关的变量,您可以在组件的样式中使用这些变量:
  29. ```scss
  30. /* 示例组件的样式 */
  31. .my-component {
  32. background-color: #fff;
  33. color: #333;
  34. /* 添加主题过渡效果 */
  35. @extend .theme-transition;
  36. /* 定义暗色主题下的样式 */
  37. .dark-mode & {
  38. background-color: $dark-bg-color;
  39. color: $dark-text-color-primary;
  40. }
  41. }
  42. ```
  43. ### 3. 使用主题组件
  44. 我们还提供了两个便捷的组件:
  45. #### ThemeProvider
  46. ThemeProvider是一个包装组件,它会自动传递当前的主题模式,并提供暗色主题的根容器:
  47. ```html
  48. <template>
  49. <ThemeProvider>
  50. <!-- 您的组件内容 -->
  51. <view class="my-content">
  52. 这里的内容会自动响应主题变化
  53. </view>
  54. </ThemeProvider>
  55. </template>
  56. <script>
  57. import ThemeProvider from '@/components/theme/ThemeProvider.vue'
  58. export default {
  59. components: {
  60. ThemeProvider
  61. }
  62. }
  63. </script>
  64. ```
  65. #### DarkModeStyles
  66. DarkModeStyles是一个提供通用暗色主题样式的无渲染组件,可以导入到您的页面中使用:
  67. ```html
  68. <template>
  69. <view>
  70. <!-- 这里不会渲染任何内容,但会应用样式 -->
  71. <DarkModeStyles />
  72. <!-- 您的组件内容 -->
  73. <view class="card">
  74. <view class="card-title">标题</view>
  75. <view class="card-content">内容</view>
  76. </view>
  77. </view>
  78. </template>
  79. <script>
  80. import DarkModeStyles from '@/components/theme/DarkModeStyles.vue'
  81. export default {
  82. components: {
  83. DarkModeStyles
  84. }
  85. }
  86. </script>
  87. ```
  88. ## 可用的主题变量
  89. 以下是在`uni.scss`中定义的暗色主题相关变量,您可以在组件样式中使用:
  90. ```scss
  91. /* 背景色 */
  92. $dark-bg-color: #1a1a1a; // 主背景色
  93. $dark-bg-color-secondary: #222; // 次要背景色
  94. $dark-bg-color-tertiary: #333; // 第三级背景色
  95. /* 文本颜色 */
  96. $dark-text-color-primary: #eee; // 主要文本颜色
  97. $dark-text-color-secondary: #bbb; // 次要文本颜色
  98. $dark-text-color-tertiary: #999; // 第三级文本颜色
  99. /* 边框和阴影 */
  100. $dark-border-color: #444; // 边框颜色
  101. $dark-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.2); // 阴影
  102. /* 强调色 */
  103. $dark-accent-color: #4a90e2; // 强调色
  104. /* 过渡动画时间 */
  105. $theme-transition-duration: 0.3s; // 主题切换过渡时间
  106. ```
  107. ## 最佳实践
  108. 1. 总是为可能受主题影响的元素添加`theme-transition`类,以确保主题切换时有平滑的过渡效果
  109. 2. 使用预定义的变量而不是硬编码颜色值,以保持整个应用的视觉一致性
  110. 3. 在设计组件时考虑两种主题模式,确保在暗色模式下内容仍然清晰可见
  111. 4. 对于特定于组件的变量,可以基于全局主题变量派生:
  112. ```scss
  113. $my-component-bg: $dark-bg-color;
  114. $my-component-text: $dark-text-color-primary;
  115. ```
  116. ## 注意事项
  117. - 当用户切换主题时,会立即应用新的主题并保存到本地存储中
  118. - 主题状态在整个应用中共享,任何组件都可以访问和修改它
  119. - 对于复杂的组件,考虑分别定义亮色和暗色两套图标或图片资源