js动态设置css主题(Style-setProperty)

ops/2024/10/18 19:28:09/

hex颜色转RGB


javascript">hex2rgb(str = '') {str = str.replace("#", "");const hxs: any = str.match(/../g);for (let index = 0; index < 3; index++) hxs[index] = parseInt(hxs[index], 16);return hxs;}

RGB转HXS


javascript">rgb2hex(r: any, g: any, b: any) {const hexs = [r.toString(16), g.toString(16), b.toString(16)];for (let index = 0; index < 3; index++) {const isHave = hexs[index].length == 1;if (isHave) hexs[index] = "0" + hexs[index];}return "#" + hexs.join("");}

颜色加深


javascript">getDark(color: any, level: any) {const rgb = this.hex2rgb(color);for (let index = 0; index < 3; index++) {rgb[index] = Math.floor(rgb[index] * (1 - level))}return this.rgb2hex(rgb[0], rgb[1], rgb[2]);}

颜色变淡


javascript">getLight(color: any, level: any) {const rgb = this.hex2rgb(color);for (let index = 0; index < 3; index++) {rgb[index] = Math.floor((255 - rgb[index]) * level + rgb[index])}return this.rgb2hex(rgb[0], rgb[1], rgb[2]);}

定义后端返回主题色


定义的参考色,在开发的过程中希望后端人员能遵循

javascript">const themeConf={primary: '#183ee4',success: '#0cce63',warn: '#ff4900',danger: '#f00c63'
}
javascript">getTheme(temeConf) {const obj={};Object.keys(temeConf).forEach(key => {let color = temeConf[key];// 用于按钮点击颜色const dColor = this.getDark(color, 0.2);obj[`--${key}`] = color;obj[`--${key}--active`] = dColor;for (let num = 1; num <= 4; num++) {const val = this.getLightColor(color, num / 10);obj[`--${key}-${num}`] = val;}});return obj;
}

将组元录入

1、在index.html内添加style标签录入(可录入::root下不挂在到任何标签)

javascript">setTheme(temeConf: any) {let eStr: string = '';Object.keys(temeConf).forEach(key => {let color = temeConf[key];// 用于按钮点击颜色const dColor = this.getDark(color, 0.2);eStr += `--${key}:${color};`;eStr += `--${key}--active:${dColor};`;for (let num = 1; num <= 4; num++) {const val = this.getLight(color, num / 10);eStr += `--${key}-${num}:${val};`;}});let styleDom = document.getElementById('#sysCssElemnet');if (!styleDom) {styleDom = document.createElement("style");styleDom.id = "#sysCssElemnet";document.head.append(styleDom);}styleDom.innerHTML = `:root{${eStr}}`;}

2、将组元录入到html

javascript">let html=document.documentElement;
const themeObj=getTheme(themConf);
Object.keys(themeObj).forEach(key=>html.style.setProperty(key,colorObj[key]));

注:如果采用第二种方式录入,建议可直接在getTheme时直接在for循环中setProperty相关组元属性


http://www.ppmy.cn/ops/27358.html

相关文章

AI大模型探索之路-训练篇9:大语言模型Transformer库-Pipeline组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

回溯法——(1)装载问题(C语言讲解)

目录 一、装载问题 1.问题概括&#xff1a; 2.解决方案&#xff08;思路&#xff09;&#xff1a; 3.图片讲解&#xff08;超详细&#xff09;&#xff1a; 4.代码分析&#xff1a; 二、算法改进&#xff1a;引入上界函数 1.问题概念&#xff1a; 2.图片讲解&#xff1a…

qt创建线程的两种方法

第一种&#xff1a;继承QThread类 方法描述 1。类MyThread继承QThread&#xff0c; 2。重载MyThread中的run()函数&#xff0c;在run()函数中写入需要执行的工作&#xff1b; 3。调用start()函数来启动线程。 不是真的跨线程&#xff0c;子线程ID和主线程ID是同一个 QThread…

uniapp 自定义 App启动图

由于uniapp默认的启动界面太过普通 所以需要自定义个启动图 普通的图片不可以过不了苹果的审核 所以使用storyboard启动图 生成 storyboard 的网站&#xff1a;初雪云-提供一站式App上传发布解决方案

24.Feign性能优化

feign底层客户端实现&#xff1a; URLConnection:默认实现&#xff0c;不支持连接池&#xff0c;性能不太好。--feign的默认实现。 Apache HttpClient: 支持连接池。 OKHttp: 支持连接池。 优化办法&#xff1a; 1.用连接池替代默认的URLConnection。 2.日志级别&#xf…

element-plus中使用el-switch时,用‘0,1’或者0,1来代替true,false绑定

介绍 switch 开关默认用 true, false来绑定的&#xff0c;但是在实际的项目中&#xff0c;有时候根据后端的接口返回&#xff0c;也可能会用字符串0 和 1 &#xff0c;或者数字 0,1来代替; 具体实现如下 详情&#xff1a; 主要实现方式是通过使用el-switch组件里的 active-val…

JSON Web Tokens攻击漏洞手法

身份验证和授权是任何应用程序的关键组件。人们已经开发了各种标准和框架来促进此类组件的开发并使应用程序更加安全。其中&#xff0c;JSON Web Tokens (JWT) 多年来已成为流行的选择。 JSON Web 令牌是一种开放的行业标准 RFC 7519 方法&#xff0c;用于在两方之间安全地发送…

【JavaScript】let,const 和 var 的区别

作用域&#xff1a; var 声明的变量具有全局作用域和函数作用域&#xff0c;可以跨块访问。let 和 const 声明的变量还具有块级作用域&#xff0c;意味着它们在声明它们的块&#xff08;例如&#xff0c;if 块、for 块、函数块等&#xff09;内可见。&#xff08;之前没有块作用…