JavaScript 的可变主题中的问题
A problem in Changeable Themes with JavaScript
我试图在 JavaScript 中测试自己,所以我决定在 codepen 中制作可变主题网站 JavaScript 这是我的代码:enter image description here
但是没用。请帮助我。
document.getElementById("Themes").addEventListener("change", function () {
document.body.style.backgroundColor = this.value;
});
这是一个答案,但我建议将值添加为数字
喜欢这个代码
<select id="Themes">
<option value="1">White</option>
<option value="2">Black</option>
<option value="3">Dark</option>
</select>
document.getElementById("Themes").addEventListener("change", function () {
let theme = document.getElementById("Themes").value;
if (theme == 1) {
document.body.style.backgroundColor = "white";
document.body.style.color = "black";
} else if (theme == 2) {
document.body.style.backgroundColor = "black";
document.body.style.color = "white";
} else if (theme == 3) {
document.body.style.backgroundColor = "darkgrey";
document.body.style.color = "white";
}
});
虽然 @LoaiMasri 在解决问题方面进展顺利,但仍有很大的改进空间。如果您要添加更多主题,尤其是为了让代码更短、更高效。
对于 LoaiMasri 的解决方案,您应该考虑的第一个更改是使用 switch
语句来列出大量 if/else
语句。
然而,如果只有少数几个主题,这将变得过于复杂。最有效的方法是通过 CSS 添加主题。为此,您采用 LoaiMasri 的方法,即在选项标签上使用 value
属性。但是给它一个更直接的值,比如 theme-1
, theme-2
...
然后你使用下面的脚本:
document.getElementById('Themes').addEventListener('change', function() {
document.body.className = "";
let theme = document.getElementById("Themes").value;
document.body.classList.add(theme);
});
document.body.className = "";
-> 这将从 body
标签中删除所有 classes 并作为重置。
let theme = document.getElementById("Themes").value;
-> 从 option
标签中获取 value
。
document.body.classList.add(theme);
-> 现在这将添加一个 class 到 body
-标签,等于 option
-标签的 value
。
您现在所要做的就是将 classes 添加到您的 CSS 中,等于 option
标签的 value
。现在,无论您要添加多少主题(已经比 LoaiMasri 的解决方案小),这将用 5 行 JS 代码解决问题。
document.getElementById('Themes').addEventListener('change', function() {
document.body.className = "";
let theme = document.getElementById("Themes").value;
document.body.classList.add(theme);
});
.theme-1 {
background-color: white;
color: black;
}
.theme-2 {
background-color: black;
color: white;
}
.theme-3 {
background-color: darkgray;
color: white;
}
<select id="Themes">
<option value="theme-1">White</option>
<option value="theme-2">Black</option>
<option value="theme-3">Dark</option>
</select>
我试图在 JavaScript 中测试自己,所以我决定在 codepen 中制作可变主题网站 JavaScript 这是我的代码:enter image description here
但是没用。请帮助我。
document.getElementById("Themes").addEventListener("change", function () {
document.body.style.backgroundColor = this.value;
});
这是一个答案,但我建议将值添加为数字
喜欢这个代码
<select id="Themes">
<option value="1">White</option>
<option value="2">Black</option>
<option value="3">Dark</option>
</select>
document.getElementById("Themes").addEventListener("change", function () {
let theme = document.getElementById("Themes").value;
if (theme == 1) {
document.body.style.backgroundColor = "white";
document.body.style.color = "black";
} else if (theme == 2) {
document.body.style.backgroundColor = "black";
document.body.style.color = "white";
} else if (theme == 3) {
document.body.style.backgroundColor = "darkgrey";
document.body.style.color = "white";
}
});
虽然 @LoaiMasri 在解决问题方面进展顺利,但仍有很大的改进空间。如果您要添加更多主题,尤其是为了让代码更短、更高效。
对于 LoaiMasri 的解决方案,您应该考虑的第一个更改是使用 switch
语句来列出大量 if/else
语句。
然而,如果只有少数几个主题,这将变得过于复杂。最有效的方法是通过 CSS 添加主题。为此,您采用 LoaiMasri 的方法,即在选项标签上使用 value
属性。但是给它一个更直接的值,比如 theme-1
, theme-2
...
然后你使用下面的脚本:
document.getElementById('Themes').addEventListener('change', function() {
document.body.className = "";
let theme = document.getElementById("Themes").value;
document.body.classList.add(theme);
});
document.body.className = "";
-> 这将从 body
标签中删除所有 classes 并作为重置。
let theme = document.getElementById("Themes").value;
-> 从 option
标签中获取 value
。
document.body.classList.add(theme);
-> 现在这将添加一个 class 到 body
-标签,等于 option
-标签的 value
。
您现在所要做的就是将 classes 添加到您的 CSS 中,等于 option
标签的 value
。现在,无论您要添加多少主题(已经比 LoaiMasri 的解决方案小),这将用 5 行 JS 代码解决问题。
document.getElementById('Themes').addEventListener('change', function() {
document.body.className = "";
let theme = document.getElementById("Themes").value;
document.body.classList.add(theme);
});
.theme-1 {
background-color: white;
color: black;
}
.theme-2 {
background-color: black;
color: white;
}
.theme-3 {
background-color: darkgray;
color: white;
}
<select id="Themes">
<option value="theme-1">White</option>
<option value="theme-2">Black</option>
<option value="theme-3">Dark</option>
</select>