• vue2实现自定义主题webpack-theme-color-replacer


    需求:根据element的自定义主题色,之后改变element的全局所有颜色,解决页面刷新后主题色失效问题,这个需要把颜色存入到浏览器的存储中,如果换个浏览器就得重新选择了哈,如果需要在不同的浏览器保持一致的主题,需要跟后端沟通

    之前还写过一个简单的,有需要的可以去看:vue实现element-ui自定义主题色切换(简单版)_element主题切换_请叫我欧皇i的博客-CSDN博客

    效果如下:

    1.下载颜色插件

    我下的是1.4.6版本,最好下载的版本一致吧,不然报错了我也没办法

    npm install webpack-theme-color-replacer@1.4.6

    2.建个js文件themeColorClient.js

    直接复制粘贴以下代码

    1. import client from 'webpack-theme-color-replacer/client'
    2. import forElementUI from 'webpack-theme-color-replacer/forElementUI'
    3. // 注意自己项目里的引入路径
    4. export let curColor = '#409EFF'
    5. // 动态切换主题色
    6. export function changeThemeColor(newColor) {
    7. var options = {
    8. newColors: [...forElementUI.getElementUISeries(newColor), '#ff0000', '#ffff00']
    9. }
    10. return client.changer.changeColor(options, Promise)
    11. .then(() => {
    12. curColor = newColor
    13. localStorage.setItem('theme_color', curColor)
    14. })
    15. }
    16. // 页面刷新的时候会触发
    17. export function initThemeColor() {
    18. const savedColor = localStorage.getItem('theme_color')
    19. if (savedColor) {
    20. curColor = savedColor
    21. changeThemeColor(savedColor)
    22. }
    23. }

    3.在main.js文件导入

    保证每次刷新数据还在

    1. import { initThemeColor } from './plugins/themeColorClient'
    2. initThemeColor()

    4.颜色选择器

    1. <script>
    2. import { changeThemeColor, curColor } from "@/plugins/themeColorClient";
    3. export default {
    4. name: "d2-header-color",
    5. data() {
    6. return {
    7. mainColor: curColor,
    8. predefine: [
    9. "#ff4500",
    10. "#ff8c00",
    11. "#ffd700",
    12. "#90ee90",
    13. "#00ced1",
    14. "#1e90ff",
    15. "#c71585",
    16. ],
    17. };
    18. },
    19. methods: {
    20. changeColor(newColor) {
    21. console.log(newColor, "颜色");
    22. changeThemeColor(newColor)
    23. .then((t) => console.log("123465"))
    24. .catch((err) => console.log(err, "567"));
    25. //.then(t => this.$x.toast.success('主题色切换成功~'))
    26. },
    27. },
    28. };
    29. script>

    5.在vue.config.js中配置

    1. const ThemeColorReplacer = require('webpack-theme-color-replacer')
    2. const forElementUI = require('webpack-theme-color-replacer/forElementUI')
    3. module.exports = {
    4. chainWebpack: config => {
    5. // 自定义主题色
    6. config
    7. .plugin('theme-color-replacer')
    8. .use(ThemeColorReplacer, [{
    9. fileName: 'style/theme-colors.[contenthash:8].css',
    10. matchColors: [
    11. ...forElementUI.getElementUISeries(process.env.VUE_APP_ELEMENT_COLOR), // Element-ui主色系列
    12. '#0cdd3a', // 自定义颜色
    13. '#c655dd'
    14. ],
    15. changeSelector: forElementUI.changeSelector,
    16. // 解决history模式下路由跳转样式不生效问题
    17. injectCss: true,
    18. isJsUgly: process.env.NODE_ENV === 'production' ? true : undefined
    19. }])
    20. }
    21. }

    6.如果非element的组件需要使用全局自定义样式可以如下设置

    在公共的scss样式文件下添加如下代码

    1. // 全局更改样式,必须是--navWidth,可以看theme文件
    2. //--navWidth为变量,必须以--开头,否则其它页面使用这个变量不会生效
    3. $mainBgc: var(--navWidth, #409eff);

     之后在需要全局样式下添加$mainBgc即可

    1. .box{
    2. color:$mainBgc;
    3. }

    如果背景色也想和主题色一样可以使用如下代码,百分比就是背景的透明度

      background-color: rgb(from $mainBgc r g b/60%);

    这样就可以实现了,文章到此结束,希望对你有所帮助~有不懂的可以在评论区联系我

  • 相关阅读:
    【编程题】【Scratch三级】2020.12 绘制图形
    C++ Reference: Standard C++ Library reference: C Library: ctime
    【Day31】力扣算法(超详细思路+注释)[1441. 用栈操作构建数组 ] [621. 任务调度器]
    设计原则之【依赖反转原则】
    wav格式如何转mp3?
    pytest测试框架pytest-xdist插件并发执行测试用例
    【正点原子FPGA连载】 第二章 实验平台简介 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
    datawhale动手学大模型应用开发-第五章-系统评估与优化
    VSCode配置 C/C++ 环境
    springboot悠悠转二手网站毕业设计源码181134
  • 原文地址:https://blog.csdn.net/qq_44278289/article/details/132849534