当前位置:   article > 正文

vue3 ts vite elementplus更改主题颜色_elementplus 按钮的默认颜色变了

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中,加载后设置主题色,具体如下:

  1. <script setup lang="ts">
  2. import { useTheme } from "@/hooks/useTheme"; //主题更改
  3. const { changeThemeColor } = useTheme();
  4. ...
  5. onMounted(() => {
  6. // 手动设置主题色
  7. changeThemeColor("#36CEBF");
  8. });
  9. ...
  10. </script>

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/332404
推荐阅读
相关标签
  

闽ICP备14008679号