上扩展实现多主题选择,切换主题)

先看一下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预设主题实现黑白主题切换的更多相关文章

  1. Js读取XML文件为List结构

    习惯了C#的List集合,对于Javascript没有list 极为不舒服,在一个利用Js读取XML文件的Demo中,决定自己构建List对象,将数据存入List. 第一步,Js读取XML文件知识 X ...

  2. JS读取XML文件数据并以table显示数据(兼容IE火狐)

    先看xml文件: <?xml version="1.0" standalone="yes"?> <student> <stuinf ...

  3. IE下JS读取xml文件示例代码

    JS读取xml文件具体步骤为:创建DOM对象.加载xml文件(仅适用于IE)附示例代码,感兴趣的朋友可以参考下,希望对大家有所帮助使用javascript脚本读取xml文件,这里暂只考虑IE浏览器st ...

  4. jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

  5. js 读取xml文件

    读取xml文件 [原创 2007-6-20 17:35:37]     字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script> ...

  6. JS读取xml

    xml文件 <?xml version="1.0" encoding="utf-8"?> <root> <data id=&quo ...

  7. ajax 之js读取xml的多浏览器兼容

    主要是分为两大类:IE.其它浏览器 IE8以下只支持这种 InputVoltage.innerText = xmlDoc.getElementsByTagName(id)[0].text, 其它浏览器 ...

  8. js读取xml文件

    假设我们现在要读取下面的 info.xml 文件 <?xml version="1.0" encoding="gb2312"?> <root& ...

  9. [HTML]js读取XML文件并解析

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

  10. 【JavaScript】JS读取XML文件并进行搜索

    需求效果 点击链接.当前页面载入xml文件并展示相应内容 通过搜索框.搜索xml文件内节点数据.展示包括内容的节点数据 功能实现 Demo终于实现效果 http://loadxmldemo.coder ...

随机推荐

  1. /proc/pids/status

    /proc/279/status是一个Linux内核中的文件,其中包含了当前进程的状态信息.每行的含义如下: Name: 进程的名称,例如"java"或"bash&quo ...

  2. 主要将子文件下大量图片进行路径编号,并保存到csv文件当中。方便直接从文件读取图片路径以及其他图片信息

    # coding: utf-8 #主要将子文件下大量图片进行路径编号,并保存到csv文件当中.方便直接从文件读取图片路径以及其他图片信息. #我做的是图像分割,所以存在三类分割区域:["la ...

  3. Java日期时间API系列15-----Jdk8中java.time包中的新的日期时间API类,java日期计算2,年月日时分秒的加减等

    通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析 ,可以看出java8设计非常好,实现接口Temporal, Tempora ...

  4. 重构案例:将纯HTML/JS项目迁移到Webpack

    我们已经了解了许多关于 Webpack 的知识,但要完全熟练掌握它并非易事.一个很好的学习方法是通过实际项目练习.当我们对 Webpack 的配置有了足够的理解后,就可以尝试重构一些项目.本次我选择了 ...

  5. md转换成_post下直接使用的文件

    md转换成_post下直接使用的文件 package org.example; import java.io.File; import java.io.IOException; import java ...

  6. A星、Floyod、Bellman-Ford

    A 星算法 A 星和 Dijkstra 算法唯一区别在于堆中排序的依据.distance 数组仍然保存实际代价,预估代价只影响堆的弹出顺序. Dijkstra 根据源点到当前点的实际代价进行排序. A ...

  7. python ES连接服务器的方法

    连接Elasticsearch(ES)服务器是进行数据搜索和分析的常用操作.Elasticsearch是一个基于Lucene的搜索引擎,提供了RESTful API来进行索引.搜索和管理数据. 以下是 ...

  8. 函数(C语言)

    目录 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.1 实参 4.2 形参 4. ...

  9. manim边做边学--通用三维坐标系

    ThreeDAxes是Manim中用于创建三维坐标系的类. 在数学.物理和工程等领域,三维坐标系的绘制是非常重要的. ThreeDAxes使得用户能够在动画中直观地展示三维空间中的对象和关系,从而提高 ...

  10. 非加密哈希函数库-SpookyHash

    地址: https://burtleburtle.net/bob/hash/spooky.html SpookyHash is a public domain noncryptographic has ...