【前端】白天/黑夜主题切换:JS读取XML预设主题实现黑白主题切换

上扩展实现多主题选择,切换主题)
先看一下XML文档
id值不能重复,一套主题的name要相同,亮色type1,暗色type0
<?xml version="1.0" encoding="UTF-8" ?>
<themes>
<theme id="0" type="1" name="default">
<name>默认主题(白)</name>
<scheme>
<!-- 主色-字体颜色-->
<color-font-main>black</color-font-main>
<!-- 主色-背景颜色-->
<color-background-main>snow</color-background-main>
<!-- 变色-字体-鼠标悬浮-->
<color-font-hover>red</color-font-hover>
<!-- 组件-按钮-字体颜色-->
<color-btn-font>snow</color-btn-font>
<!-- 组件-按钮-背景颜色-->
<color-btn-background>red</color-btn-background>
<!-- 修饰-阴影-普通-->
<color-shadow>rgba(0,0,0,0.1)</color-shadow>
</scheme>
</theme>
<theme id="1" type="0" name="default">
<name>默认主题(黑)</name>
<scheme>
<!-- 主色-字体颜色-->
<color-font-main>snow</color-font-main>
<!-- 主色-背景颜色-->
<color-background-main>black</color-background-main>
<!-- 变色-字体-鼠标悬浮-->
<color-font-hover>red</color-font-hover>
<!-- 组件-按钮-字体颜色-->
<color-btn-font>black</color-btn-font>
<!-- 组件-按钮-背景颜色-->
<color-btn-background>red</color-btn-background>
<!-- 修饰-阴影-普通-->
<color-shadow>rgba(0,0,0,0.1)</color-shadow>
</scheme>
</theme>
</themes>
再看一下CSS中的:root
:root{
font-family: 'longmen', ui-monospace;
--font-main-color:black;
--font-hover-color:red;
--font-btn-color:snow;
--background-btn-color:red;
--background-color:snow;
--shadow-color:rgba(0,0,0,0.1);
}
接下来是JS代码:
function Log(message,type="INFO"){
type = type.toUpperCase()
if(type==="INFO"){
console.log("%c "+type + " %c"+message,"color:snow;background:blue;margin:0 5px;padding:5px;box-sizing:border-box;border-radius:5px;font-size:1em;","color:blue;font-size:1.2em;")
}else if(type==="WARN"){
console.log("%c "+type + " %c"+message,"color:snow;background:yellow;margin:0 5px;padding:5px;box-sizing:border-box;border-radius:5px;font-size:1em;","color:yellow;font-size:1.2em;")
}else if(type==="DANGER"){
console.log("%c "+type + " %c"+message,"color:snow;background:red;margin:0 5px;padding:5px;box-sizing:border-box;border-radius:5px;font-size:1em;","color:red;font-size:1.2em;")
}else{
console.log(message)
}
}
// 非IE浏览器读取XML的参考资料:https://blog.csdn.net/qq_42455262/article/details/105656320
function itemChange(){
Log("加载XML解析器...")
let xmlDoc = '';
if (window.ActiveXObject){ // IE
const activeXNameList = ["MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument", "Microsoft.XMLDOM", "MSXML.DOMDocument"];
for(let h=0; h<activeXNameList.length; h++)
{
try{
xmlDoc=new ActiveXObject(activeXNameList[h]);
}catch(e){
continue;
}
if(xmlDoc) break;
}
}else if(document.implementation && document.implementation.createDocument){ //非 IE
Log("当前浏览器非IE浏览器","warn")
// xmlDoc=document.implementation.createDocument("","",null);
xmlDoc = new XMLHttpRequest();
}else{
Log("当前浏览器无支持XML的解析器...","danger")
return false
}
//读取主题文件(XML)
let isIE = false
Log("加载主题配置文件...")
try{
xmlDoc.load("./config/theme/default.xml");
isIE = true
}catch (e){
try {
//非IE浏览器处理方式
xmlDoc.open("GET", "config/theme/default.xml", false);
xmlDoc.send();
xmlDoc = xmlDoc.responseXML
isIE=false
}catch (e){
console.log(e)
return false
}
}
let str = isIE?"是":"不是"
Log("主题配置文件加载完成,当前"+str+"IE浏览器")
Log(xmlDoc,"text")
let theme_new;//一种主题,相对应用中模式的另外一种模式(B)
let theme_img = document.getElementById("img-theme")
if (theme_img.classList.contains("icon-taiyang-copy")) {
Log("当前主题为白天主题。开始切换到夜主题")
//设置图标
theme_img.classList.remove("icon-taiyang-copy")
theme_img.className+=" icon-yueliang"//注意要有空格
theme_new = xmlDoc.getElementById("1")
} else {
//设置图标
theme_img.classList.remove("icon-yueliang")
theme_img.className+=" icon-taiyang-copy"// 注意要有空格
theme_new = xmlDoc.getElementById("0")
}
//应用新主题
//<!-- 主色-字体颜色-->
document.documentElement.style.setProperty("--font-main-color",theme_new.getElementsByTagName("color-font-main")[0].innerHTML)
//<!-- 主色-背景颜色-->
document.documentElement.style.setProperty("--background-color",theme_new.getElementsByTagName("color-background-main")[0].innerHTML)
//<!-- 变色-字体-鼠标悬浮-->
document.documentElement.style.setProperty("--font-hover-color",theme_new.getElementsByTagName("color-font-hover")[0].innerHTML)
//<!-- 组件-按钮-字体颜色-->
document.documentElement.style.setProperty("--font-btn-color",theme_new.getElementsByTagName("color-btn-font")[0].innerHTML)
//<!-- 组件-按钮-背景颜色-->
document.documentElement.style.setProperty("--background-btn-color",theme_new.getElementsByTagName("color-btn-background")[0].innerHTML)
//<!-- 修饰-阴影-普通-->
document.documentElement.style.setProperty("--shadow-color",theme_new.getElementsByTagName("color-shadow")[0].innerHTML)
}
【前端】白天/黑夜主题切换:JS读取XML预设主题实现黑白主题切换的更多相关文章
- Js读取XML文件为List结构
习惯了C#的List集合,对于Javascript没有list 极为不舒服,在一个利用Js读取XML文件的Demo中,决定自己构建List对象,将数据存入List. 第一步,Js读取XML文件知识 X ...
- JS读取XML文件数据并以table显示数据(兼容IE火狐)
先看xml文件: <?xml version="1.0" standalone="yes"?> <student> <stuinf ...
- IE下JS读取xml文件示例代码
JS读取xml文件具体步骤为:创建DOM对象.加载xml文件(仅适用于IE)附示例代码,感兴趣的朋友可以参考下,希望对大家有所帮助使用javascript脚本读取xml文件,这里暂只考虑IE浏览器st ...
- jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)
xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...
- js 读取xml文件
读取xml文件 [原创 2007-6-20 17:35:37] 字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script> ...
- JS读取xml
xml文件 <?xml version="1.0" encoding="utf-8"?> <root> <data id=&quo ...
- ajax 之js读取xml的多浏览器兼容
主要是分为两大类:IE.其它浏览器 IE8以下只支持这种 InputVoltage.innerText = xmlDoc.getElementsByTagName(id)[0].text, 其它浏览器 ...
- js读取xml文件
假设我们现在要读取下面的 info.xml 文件 <?xml version="1.0" encoding="gb2312"?> <root& ...
- [HTML]js读取XML文件并解析
xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...
- 【JavaScript】JS读取XML文件并进行搜索
需求效果 点击链接.当前页面载入xml文件并展示相应内容 通过搜索框.搜索xml文件内节点数据.展示包括内容的节点数据 功能实现 Demo终于实现效果 http://loadxmldemo.coder ...
随机推荐
- 淘宝程序员没活硬整?在 Excel 和 VSCode 中购物!
大家好,我是程序员鱼皮,最近某宝网站的改进,属实是有点 "新" 了. 你敢相信这是一个购物网站么? 你可以在 Excel 表格中挑选商品进行购物,还原度极高,这两个图表更是点睛之笔 ...
- 博客配套视频已上传至 B 站,欢迎关注
博客配套视频已上传至 B 站,欢迎关注+一键三连 链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 链接 ...
- while循环和do循环、缓冲区、一维数组
缓冲区 输入缓冲区 从键盘得到数据的时候用户输入的数据首先进入输入缓冲区,然后程序从输入缓冲区里获得数字,先进入输入缓冲区的数据必须先处理(类似排队),如果先进入输入缓冲区的数据无法处理,程序就得不到 ...
- 自学PHP笔记(二)PHP数据类型
PHP数据类型可支持以下8种类型: 类型 说明 string 字符串 boolean 布尔值 integer 整型 float 浮点型 array 数组 object 对象 resource 资源 N ...
- git知识点,常用命令
git理论知识 git的服务器端(remote)端包含多个repository,每个repository可以理解为一个项目. 而每个repository下有多个branch."origin& ...
- Robust Loop Closure by Textual Cues in Challenging Environments
arxiv | 南洋理工大学开源 基于文本线索实现复杂环境中的鲁棒闭环检测 [Robust Loop Closure by Textual Cues in Challenging Environmen ...
- 重温c语言之,7天开整,就是随便的写写,第三天+第四天版
一:指针 1.关于指针的含义---粗略 例如:int a=10; int* p=&a; 这里的*,是说明p是指针变量,int 说明p是指向的对象是int类型的 *p=20, 这里的*是解引用符 ...
- 2-6 C/C++ 编写头文件
目录 头文件怎么起作用 避免头文件被重复引用 避免头文件被重复引用的方法:条件编译 1. 给每个头文件添加一个预编译变量(preprocessor variable)作为标记(Label) 2. 使用 ...
- C++入门级基础知识汇总
知识来源:https://www.imooc.com/learn/1304 https://www.runoob.com/cplusplus/cpp-tutorial.html 编程第一步导入头文件: ...
- ubuntu 安装使用 mytop
apt搜索一下 $ sudo apt search mytop Sorting... Done Full Text Search... Done mytop/focal,focal,now 1.9.1 ...