ant-design-vue-pro中的主题切换:实现深色模式的完整方案

ant-design-vue-pro中的主题切换:实现深色模式的完整方案

【免费下载链接】ant-design-vue-pro 【免费下载链接】ant-design-vue-pro 项目地址: https://gitcode.com/gh_mirrors/antd/ant-design-vue-pro

你是否曾在深夜使用管理系统时被刺眼的白色界面困扰?是否希望应用能像手机系统一样随环境切换明暗主题?本文将带你了解如何在ant-design-vue-pro中实现深色模式切换,通过简单配置即可让系统拥有日夜两种界面风格,提升用户体验。

主题切换的核心配置文件

ant-design-vue-pro的主题配置主要集中在两个关键文件中:全局默认设置和主题切换逻辑实现。

默认主题设置定义在src/config/defaultSettings.js中,包含了项目的初始主题配置:

export default {
  navTheme: 'dark', // 导航菜单主题 ['dark', 'light']
  primaryColor: '#1890ff', // 默认主题色
  layout: 'sidemenu', // 布局方式 ['sidemenu', 'topmenu']
  contentWidth: 'Fluid', // 内容区布局
  fixedHeader: false, // 固定Header
  fixSiderbar: false, // 固定左侧菜单
  colorWeak: false // 色盲模式
}

主题切换工具则在src/components/SettingDrawer/settingConfig.js中实现,提供了主题色列表和切换方法:

export { 
  updateTheme, // 主题色更新方法
  colorList,  // 预设主题色列表
  updateColorWeak // 色盲模式切换
}

深色模式的实现原理

深色模式主要通过切换navTheme参数在'dark'和'light'之间的值来实现。系统会根据这个参数加载不同的样式表,从而改变界面的整体色调。

主题切换流程图

主题切换的核心流程如下:

  1. 用户在设置面板选择深色/浅色主题
  2. 触发handleMenuTheme方法更新状态管理中的主题值
  3. 重新渲染布局组件,应用新的主题样式
  4. 同步更新本地存储,保持用户偏好设置

配置界面组件解析

主题设置界面由src/components/SettingDrawer/SettingDrawer.vue组件实现,提供了直观的可视化配置界面。

主题选择区域

组件中实现了两种主题的切换选项,通过点击不同的主题预览图来切换:

<div class="setting-drawer-index-blockChecbox">
  <a-tooltip>
    <template slot="title">暗色菜单风格</template>
    <div class="setting-drawer-index-item" @click="handleMenuTheme('dark')">
      <img src="https://gw.alipayobjects.com/zos/rmsportal/LCkqqYNmvBEbokSDscrm.svg" alt="dark">
      <div class="setting-drawer-index-selectIcon" v-if="navTheme === 'dark'">
        <a-icon type="check"/>
      </div>
    </div>
  </a-tooltip>
  
  <a-tooltip>
    <template slot="title">亮色菜单风格</template>
    <div class="setting-drawer-index-item" @click="handleMenuTheme('light')">
      <img src="https://gw.alipayobjects.com/zos/rmsportal/jpRkZQMyYRryryPNtyIC.svg" alt="light">
      <div class="setting-drawer-index-selectIcon" v-if="navTheme !== 'dark'">
        <a-icon type="check"/>
      </div>
    </div>
  </a-tooltip>
</div>

主题切换逻辑

当用户点击主题选项时,会触发handleMenuTheme方法,通过Vuex状态管理更新主题设置:

handleMenuTheme (theme) {
  this.$store.dispatch('ToggleTheme', theme)
}

状态管理中的ToggleTheme action会更新navTheme的值,并触发界面重新渲染,从而应用新的主题样式。

主题颜色的动态切换

除了明暗主题切换,ant-design-vue-pro还支持主题色的自定义。主题色切换功能由src/components/SettingDrawer/themeColor.js实现,通过webpack-theme-color-replacer插件动态替换CSS中的颜色值。

主题色生成原理

getAntdSerials (color) {
  // 生成淡化色阶
  const lightens = new Array(9).fill().map((t, i) => {
    return client.varyColor.lighten(color, i / 10)
  })
  // 生成颜色 palette
  const colorPalettes = generate(color)
  return lightens.concat(colorPalettes)
}

这段代码生成了一系列与主色调相关的衍生颜色,确保整个界面的颜色协调统一。

切换主题色的方法

changeColor (newColor) {
  var options = {
    newColors: this.getAntdSerials(newColor),
    changeUrl (cssUrl) {
      return `/${cssUrl}`
    }
  }
  return client.changer.changeColor(options, Promise)
}

完整实现步骤

1. 修改默认配置

打开src/config/defaultSettings.js,设置初始主题为深色:

export default {
  navTheme: 'dark', // 默认深色主题
  // 其他配置保持不变
}

2. 添加主题切换按钮

在布局组件中添加主题切换按钮,调用设置抽屉组件:

<SettingDrawer @visibleChange="handleSettingVisibleChange" />

3. 持久化主题设置

修改状态管理逻辑,将用户选择的主题偏好保存到localStorage:

// 在ToggleTheme action中添加
localStorage.setItem('navTheme', theme)

4. 初始化时加载保存的主题

在应用初始化时从localStorage读取保存的主题设置:

// 在应用入口文件中添加
const savedTheme = localStorage.getItem('navTheme')
if (savedTheme) {
  store.dispatch('ToggleTheme', savedTheme)
}

效果展示与对比

通过切换主题设置,我们可以看到界面的明显变化。以下是深色模式和浅色模式的对比:

深色模式适合在低光环境下使用,减少眼部疲劳,而浅色模式则在明亮环境下提供更好的可读性。用户可以根据自己的使用习惯和环境自由切换。

总结与扩展

ant-design-vue-pro提供了完善的主题切换机制,通过简单的配置即可实现深色模式。除了预设的两种主题,还可以通过自定义主题色、调整布局等方式进一步个性化界面。

建议在实际项目中根据用户需求决定是否开启主题切换功能,并考虑添加跟随系统主题自动切换的功能,提升用户体验。

如果觉得本文对你有帮助,欢迎点赞收藏,并关注后续更多关于ant-design-vue-pro的实用教程!

【免费下载链接】ant-design-vue-pro 【免费下载链接】ant-design-vue-pro 项目地址: https://gitcode.com/gh_mirrors/antd/ant-design-vue-pro

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值