vue2 vue3 修改elementUI和elementPlus主题颜色

vue2 vue3 修改elementUI和elementPlus主题颜色

  • 工具类theme.js
js 复制代码
// 
/**
 * 处理主题样式
 * @param {String} theme 主题颜色 如: '#409EFF'
 */
export function handleThemeStyle(theme) {
	document.documentElement.style.setProperty('--el-color-primary', theme)
	for (let i = 1; i <= 9; i++) {
		document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, `${getLightColor(theme, i / 10)}`)
	}
	for (let i = 1; i <= 9; i++) {
		document.documentElement.style.setProperty(`--el-color-primary-dark-${i}`, `${getDarkColor(theme, i / 10)}`)
	}
}

// hex颜色转rgb颜色
export function hexToRgb(str) {
	str = str.replace('#', '')
	let hexs = str.match(/../g)
	for (let i = 0; i < 3; i++) {
		hexs[i] = parseInt(hexs[i], 16)
	}
	return hexs
}

// rgb颜色转Hex颜色
export function rgbToHex(r, g, b) {
	let hexs = [r.toString(16), g.toString(16), b.toString(16)]
	for (let i = 0; i < 3; i++) {
		if (hexs[i].length == 1) {
			hexs[i] = `0${hexs[i]}`
		}
	}
	return `#${hexs.join('')}`
}

// 变浅颜色值
export function getLightColor(color, level) {
	let rgb = hexToRgb(color)
	for (let i = 0; i < 3; i++) {
		rgb[i] = Math.floor((255 - rgb[i]) * level + rgb[i])
	}
	return rgbToHex(rgb[0], rgb[1], rgb[2])
}

// 变深颜色值
export function getDarkColor(color, level) {
	let rgb = hexToRgb(color)
	for (let i = 0; i < 3; i++) {
		rgb[i] = Math.floor(rgb[i] * (1 - level))
	}
	return rgbToHex(rgb[0], rgb[1], rgb[2])
}
  • App.vue中调用
js 复制代码
import { handleThemeStyle } from '@/utils/theme';

onMounted(() => {
  nextTick(() => {
    // 初始化主题样式
    handleThemeStyle('#409EFF');
  });
});
相关推荐
社恐的下水道蟑螂几秒前
LangChain 进阶实战:从玩具 Demo 到生产级 AI 应用(JS/TS 全栈版)
前端·langchain·openai
Fairy要carry3 分钟前
项目01-手搓Agent之loop
前端·javascript·python
亲亲小宝宝鸭8 分钟前
Ctrl ACV工程师的提效之路:删掉项目中的冗余
前端
kyriewen11 分钟前
DOM树与节点操作:用JS给网页“动手术”
前端·javascript·面试
米饭同学i15 分钟前
基于腾讯云COS的小程序素材上传功能实现
前端·javascript·react.js
cxxcode15 分钟前
前端性能指标接入 Prometheus 技术方案
前端
辣椒炒代码15 分钟前
🚀 AI Agent 入门实战:基于 LangChain + MCP 构建智能导游助手
前端
ruanCat20 分钟前
前端工程化工具链从零配置:simple-git-hooks + lint-staged + commitlint
前端·git·代码规范
光影少年22 分钟前
如何开发一个CLI工具?
javascript·测试工具·前端框架·node.js
哈__32 分钟前
ReactNative项目OpenHarmony三方库集成实战:react-native-fingerprint-scanner
javascript·react native·react.js