vue在线动态切换主题色方案


Posted in Javascript onMarch 26, 2020

主要原理是利用webpack插件webpack-theme-color-replacer提取相关颜色css然后根据配置动态生成替换的css

具体实现步骤如下:

1.添加webpack插件,新建文件webpack/themePlugin.js

const ThemeColorReplacer = require('webpack-theme-color-replacer')
const forElementUI = require('webpack-theme-color-replacer/forElementUI')
const config = require('../src/config/appConfig')
module.exports = new ThemeColorReplacer({
  fileName: 'css/theme-colors.[contenthash:8].css',
  matchColors: [
    ...forElementUI.getElementUISeries(config.themeColor), //element-ui主色系列
    // '#0cdd3a', //自定义颜色
  ],
  changeSelector: forElementUI.changeSelector,
  isJsUgly: process.env.NODE_ENV !== 'development',
  // injectCss: false,
  // resolveCss(resultCss) { // optional. Resolve result css code as you wish.
  //   return resultCss + youCssCode
  // }
})

matchColors数组中可配置多个自定义要替换的主题色

2.在vue.config.js中添加这个插件

const themePlugin=require('./webpack/themePlugin');
module.exports = {
 configureWebpack: {
  plugins: [
        themePlugin
       ]
  }
 }

3.新建文件themeColorClient.js

import client from 'webpack-theme-color-replacer/client'
import forElementUI from 'webpack-theme-color-replacer/forElementUI'
import appConfig from '@/config/appConfig'
export let curColor = appConfig.themeColor

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

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

4.在需要的时候调用 initThemeColor初始化颜色 changeThemeColor改变主题颜色

import { initThemeColor,changeThemeColor } from './utils/themeColorClient'
initThemeColor()
changeThemeColor('#F56C6C')//传入颜色格式应该为十六进制颜色值,'red'类似颜色暂不支持

具体细节请参考https://github.com/hzsrc/vue-element-ui-scaffold-webpack4

到此这篇关于vue在线动态切换主题色方案的文章就介绍到这了,更多相关vue 动态切换主题内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Javascript图像处理思路及实现代码
Dec 25 Javascript
JS前端框架关于重构的失败经验分享
Mar 17 Javascript
加载列表时jquery获取ul中第一个li的属性
Nov 02 Javascript
JS获得图片alt信息的方法
Apr 01 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
Aug 15 Javascript
smartupload实现文件上传时获取表单数据(推荐)
Dec 12 Javascript
jQuery实现最简单实用的分秒倒计时
Feb 05 Javascript
基于JavaScript实现验证码功能
Apr 01 Javascript
jQuery zTree树插件动态加载实例代码
May 11 jQuery
JS对象和字符串之间互换操作实例分析
Feb 02 Javascript
JS三级联动代码格式实例详解
Dec 30 Javascript
Moment的feature导致线上bug解决分析
Sep 23 Javascript
javascript实现简单搜索功能
Mar 26 #Javascript
jQuery实现html可联动的百分比进度条
Mar 26 #jQuery
vue+element 实现商城主题开发的示例代码
Mar 26 #Javascript
js实现带箭头的进度流程
Mar 26 #Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
Mar 26 #Javascript
jquery css实现流程进度条
Mar 26 #jQuery
jquery实现上传文件进度条
Mar 26 #jQuery
You might like
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
深入解析Python中的WSGI接口
2015/05/11 Python
Python实现豆瓣图片下载的方法
2015/05/25 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
python创建n行m列数组示例
2019/12/02 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
信息科学与技术专业求职信范文
2014/02/20 职场文书
教师演讲稿大全
2014/05/16 职场文书
招标授权委托书样本
2014/09/23 职场文书
学术会议邀请函
2015/01/30 职场文书
先进个人自荐书
2015/03/06 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server