• vue3 ts vite elementplus更改主题颜色


    开发工具:vue3 + ts + vite + elementplus

    最近突然间主题色不见了,恢复到了默认情况,可能是配置的vite自定义引入及其它相关的配置,导致的问题。结果用动态改变主题色来实现改变主题了,先看下代码。

    src/hooks/useTheme.ts

    1. // 文件:src/hooks/useTheme.ts
    2. // import { useTheme } from "@/hooks/useTheme"; //引入主题勾子
    3. // const { changeThemeColor } = useTheme(); // 解构功能
    4. import { ElMessage } from 'element-plus'
    5. /**
    6. * 颜色转换函数
    7. * @method hexToRgb hex 颜色转 rgb 颜色
    8. * @method rgbToHex rgb 颜色转 Hex 颜色
    9. * @method getDarkColor 加深颜色值
    10. * @method getLightColor 变浅颜色值
    11. */
    12. export function useTheme() {
    13. // str 颜色值字符串
    14. const hexToRgb = (str: string): any => {
    15. let hexs: any = ''
    16. let reg = /^\#?[0-9A-Fa-f]{6}$/
    17. if (!reg.test(str)) {
    18. ElMessage.warning('输入错误的hex')
    19. return ''
    20. }
    21. str = str.replace('#', '')
    22. hexs = str.match(/../g)
    23. for (let i = 0; i < 3; i++) hexs[i] = parseInt(hexs[i], 16)
    24. return hexs
    25. }
    26. // r 代表红色 | g 代表绿色 | b 代表蓝色
    27. const rgbToHex = (r: any, g: any, b: any): string => {
    28. let reg = /^\d{1,3}$/
    29. if (!reg.test(r) || !reg.test(g) || !reg.test(b)) {
    30. ElMessage.warning('输入错误的rgb颜色值')
    31. return ''
    32. }
    33. let hexs = [r.toString(16), g.toString(16), b.toString(16)]
    34. for (let i = 0; i < 3; i++) if (hexs[i].length == 1) hexs[i] = `0${hexs[i]}`
    35. return `#${hexs.join('')}`
    36. }
    37. // color 颜色值字符串 | level 变浅的程度,限0-1之间
    38. const getDarkColor = (color: string, level: number): string => {
    39. let reg = /^\#?[0-9A-Fa-f]{6}$/
    40. if (!reg.test(color)) {
    41. ElMessage.warning('输入错误的hex颜色值')
    42. return ''
    43. }
    44. let rgb = useTheme().hexToRgb(color)
    45. for (let i = 0; i < 3; i++) rgb[i] = Math.floor(rgb[i] * (1 - level))
    46. return useTheme().rgbToHex(rgb[0], rgb[1], rgb[2])
    47. }
    48. // color 颜色值字符串 | level 加深的程度,限0-1之间
    49. const getLightColor = (color: string, level: number): string => {
    50. let reg = /^\#?[0-9A-Fa-f]{6}$/
    51. if (!reg.test(color)) {
    52. ElMessage.warning('输入错误的hex颜色值')
    53. return ''
    54. }
    55. let rgb = useTheme().hexToRgb(color)
    56. for (let i = 0; i < 3; i++) rgb[i] = Math.floor((255 - rgb[i]) * level + rgb[i])
    57. return useTheme().rgbToHex(rgb[0], rgb[1], rgb[2])
    58. }
    59. /**
    60. * 切换主题颜色
    61. */
    62. const changeThemeColor =(color: string)=> {
    63. document.documentElement.style.setProperty("--el-color-primary", color);
    64. document.documentElement.style.setProperty("--el-color-primary-dark-2", `${getDarkColor(color, 0.1)}`);
    65. for (let i = 1; i <= 9; i++) {
    66. document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, `${getLightColor(color, i / 10)}`);
    67. }
    68. }
    69. return {
    70. hexToRgb,
    71. rgbToHex,
    72. getDarkColor,
    73. getLightColor,
    74. changeThemeColor
    75. }
    76. }

    在App.vue中,加载后设置主题色,具体如下:

    这样,主题色就更改过来了,但是有个问题,页面会从elementplus的默认蓝色变成我设置的色,不在乎的过。若在乎,请自己找其它方案。

  • 相关阅读:
    msfconsole中ssh_login模块的使用以及使用时MySQL数据库连接不上时的解决办法
    LabView---双通道示波器(内含信号发生器)
    IOS工程:如何在apple后台为app添加沙盒测试账户
    Win系统VMware虚拟机安装配置(一)(附激活码安装包)
    Promise.all和 race
    Open-Dis的C++版本编译(CMake-gpu 3.21.4)以及SDL2和SDL_net库的配置使用
    PIVOT函数-动态列
    【C语言数据结构】带头节点与不带头节点的单链表头插法对比
    图解辗转相除法求解最大公约数
    Linux exec函数族
  • 原文地址:https://blog.csdn.net/tdjqqq/article/details/134458718