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

embedded/2024/9/22 23:57:40/

hex颜色转RGB


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

RGB转HXS


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

颜色加深


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

颜色变淡


javascript">getLight(color, level) {const rgb = this.hex2rgb(color);for (let index = 0; index < 3; index++){rgbc[index] = Math.floor((255 - rgbc[index]) * level + rgbc[index])}return 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">let styleDom=document.getElementById('#sysCssElemnet');
if(!styleDom){styleDom=document.createElement("style");styleDom.id="#sysCssElemnet";document.head.append(styleDom);
}
const themeObj=getTheme(themConf).toString();
styleDom.innerHTML=`:root{${themeObj}}`;

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/embedded/20374.html

相关文章

计算机网络—网络层

一、网络层的功能 网络层的任务 主要任务是通过路由器实现网络互联&#xff0c;进而实现数据报在各网络之间的传输 “数据报”就是从数据链路层接收的分组好的数据&#xff0c;又叫“IP数据报”或“IP分组” 网络层提供的两种服务 1面向连接的虚电路服务 当两台计算机进行…

C++ 如何高效的使用 STL 容器?

目录 1.引言 2.容器分类 3.直接将对象、数据写入容器存在哪些问题&#xff1f; 4.对象是如何复制的&#xff1f; 5.复制存在哪些问题&#xff1f; 6.如何避免复制&#xff1f; 7.其它高效应用 7.1.选择合适的容器 7.2.避免不必要的复制 7.3.使用适当的分配器 7.4.利…

RTC补偿 将核心算法集成在主控MCU中运行,在硬件上增加低成本的温度传感器和晶振,通过软件和硬件的配合

概览 小华HC32F460/HC32L196芯片&#xff0c;将核心算法集成在主控MCU中运行&#xff0c;在硬件上增加低成本的温度传感器和晶振&#xff0c;通过软件和硬件的配合&#xff0c;实现和时钟芯片一样的带有温补功能的高精度RTC&#xff0c;并专门制作了相关的软硬件DEMO。 方案特点…

HCIP-Datacom-ARST必选题库_路由协议【道题】

单选题 442/1327. 策略路由(policy-based-route)不支持根据下列哪种策略来指定数据包转发的路径? 源地址 8 目的地址 源MAC 报文长度 单选题 10/1327、下面是关于路由选择工具的描述,其中表述错误的是 route- policy只能匹配路由和数据包,并不能用来修改路由属性或者数…

锂电池SOH预测 | 基于LSTM的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

PotatoPie 4.0 实验教程(31) —— FPGA实现摄像头图像高斯滤波

什么是高斯滤波 高斯滤波是一种常见的图像处理技术&#xff0c;用于去除图像中的噪声和平滑图像。它的原理基于统计学中的高斯分布&#xff08;也称为正态分布&#xff09;。 在高斯滤波中&#xff0c;一个二维的高斯核函数被用来对图像中的每个像素进行加权平均。这个高斯核…

【数值模型后处理系列】通风系数计算及垂直层插值

一、通风系数 1.1 通风系数简介 通风系数&#xff08;Ventilation Coefficient&#xff0c;VC&#xff09;可以用来表征扩散条件&#xff0c;其计算公式如下&#xff08;参考U S Iyer and P Ernest Raj的文章&#xff09;&#xff1a; 其中mixing depth选用WRF输出的边界层高…

密码学系列5-BLS短签名和存在不可伪造性(EUF-CMA)

本章将给出BLS短签名方案和方案的安全性证明。这个方案是很多签名方案的基础方案,学会这一个方案,也就学会了这一系列方案的安全性证明。 注:签名方案:私钥签名,公钥验证;加密方案:公钥加密,私钥解密。 论文名:Short signatures from the Weil pairing 一、BLS短签名 …