webpack-theme-color-replacer+elementui自定义配置主题色

webpack-theme-color-replacer原理是通过获取到配置数组里的颜色值,在触发换色方法时,elementui使用的颜色值存在与配置表中颜色一致的颜色,则改颜色会被替换成新的颜色值。

若是自定义的css文件,需要配置css文件路径

若是需要修改除主题色外的颜色,则配置颜色数组需传入对应的默认色,在触发修改颜色方法前,通过将主题色的十六进制转为RGBA,然后通过规律加减颜色通道生成其它色,位置需要一一对应

一、安装webpack-theme-color-replacer

复制代码
npm install ---save webpack-theme-color-replacer

二、在vue.config.js配置

javascript 复制代码
const ThemeColorReplacer = require("webpack-theme-color-replacer");
const forElementUI = require("webpack-theme-color-replacer/forElementUI");
const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
  transpileDependencies: true,
  chainWebpack: config => {
    // 自定义换肤
    config
      .plugin("webpack-theme-color-replacer")
      .use(ThemeColorReplacer)
      .tap(options => {
        const matchColors = []
        const data = ['#409eff']//这里可传入多个颜色,后续匹配到的会同步修改
        data.forEach(item => {
          matchColors.push(...forElementUI.getElementUISeries(item))
        })
        options[0] = {
          fileName: "css/theme-colors-[contenthash:8].css",
          matchColors,
          changeSelector: forElementUI.changeSelector,
          //项目其它css文件,存在与主题色一样的颜色也会更改,否则不会改变
          externalCssFiles: ["./src/assets/css/index.css"],
          isJsUgly: process.env.NODE_ENV !== "development"
        };
        return options;
      });
  }
});

三、创建utils/thems.js

javascript 复制代码
import client from "webpack-theme-color-replacer/client";
import forElementUI from "webpack-theme-color-replacer/forElementUI";

export let curColor = "#409eff";

// 动态切换主题色
export function changeThemeColor(newColor) {
  const options = {
    newColors: [...forElementUI.getElementUISeries(newColor)]
  };
  return client.changer.changeColor(options, Promise).then(t => {
    curColor = newColor;
    localStorage.setItem("theme_color", curColor);
  });
}

export function initThemeColor() {
  const savedColor = localStorage.getItem("theme_color");
  if (savedColor) {
    curColor = savedColor;
    changeThemeColor(savedColor);
  }
}

四、组件中使用

javascript 复制代码
 <el-color-picker v-model="mainColor" size="small" @change="changeColor"></el-color-picker>


<script>
import Vue from "vue";
import { ColorPicker } from "element-ui";
import { changeThemeColor, curColor } from "./utils/thems.js";
Vue.use(ColorPicker);
export default {
  name: "App",
  data() {
    return {
      mainColor: curColor
    };
  },
  methods: {
    changeColor(newColor) {
      changeThemeColor(newColor).then(t => {
        console.log("t: ", t);
      });
    }
  }
};
</script>

五、项目加载时,使用上次修改后的主题色

javascript 复制代码
//main.js
import { initThemeColor } from './utils/theme.js'
initThemeColor()
相关推荐
蚂小蚁9 分钟前
一文吃透:宏任务、微任务、事件循环、浏览器渲染、Vue 批处理与 Node 差异(含性能优化)
前端·面试·架构
狼性书生21 分钟前
uniapp实现的Tab 选项卡组件模板
前端·uni-app·vue·组件·插件
吃饺子不吃馅26 分钟前
前端画布类型编辑器项目,历史记录技术方案调研
前端·架构·github
拜晨41 分钟前
使用motion实现小宇宙贴纸墙效果
前端·交互设计
拜晨1 小时前
使用motion实现小宇宙节目广场的效果
前端·交互设计
知花实央l1 小时前
【Web应用实战】 文件上传漏洞实战:Low/Medium/High三级绕过(一句话木马拿webshell全流程)
前端·学习·网络安全·安全架构
华仔啊1 小时前
JavaScript + Web Audio API 打造炫酷音乐可视化效果,让你的网页跟随音乐跳起来
前端·javascript
鸡吃丸子1 小时前
SEO入门
前端
檀越剑指大厂2 小时前
【Nginx系列】Tengine:基于 Nginx 的高性能 Web 服务器与反向代理服务器
服务器·前端·nginx