Javascript 暗模式切换不适用于 onClick
Javascript dark mode toggle not working with onClick
main.js:
function darkModeToggle() {
var element = document.body;
element.classList.add("darkmode");
localStorage.setItem("mode", "dark");
let mode = localStorage.getItem('mode')
if (mode === 'dark') {
document.getElementById("darkmode-button").onclick = lightModeToggle();
document.getElementById("darkmode-button").innerHTML = 'Light mode';
localStorage.setItem("mode", "light");
return false
}
}
function lightModeToggle() {
var element = document.body;
element.classList.remove("darkmode");
localStorage.setItem("mode", "light");
let mode = localStorage.getItem('mode')
console.log('Hello')
if (mode === 'light') {
localStorage.setItem("mode", "dark");
document.getElementById("darkmode-button").onclick = darkModeToggle();
document.getElementById("darkmode-button").innerHTML = 'Dark mode'
}
}
我在 home.html
中有一个按钮
<button onClick='darkModeToggle' id='darkmode-button'>Dark mode</button>
但这不起作用..如果用户想要在网站中使用暗模式或亮模式,我想存储用户的设置..
为什么我当前的代码不起作用,如何解决?
您可以直接使用按钮文本来识别模式,而不是使用localStorage。你不需要两个不同的函数来改变模式。
html 中还有一个问题。 onClick 事件应如下附加。
<button onClick='toggleMode()' id='darkmode-button'>Dark mode</button>
function toggleMode() {
let buttonText = document.getElementById("darkmode-button");
var element = document.body;
if (buttonText.innerHTML === 'Light mode') {
element.classList.add("darkmode");
document.getElementById("darkmode-button").innerHTML = 'Dark mode';
}
else
{
element.classList.add("lightmode");
document.getElementById("darkmode-button").innerHTML = 'Light mode';
}
}
<button onClick='toggleMode()' id='darkmode-button'>Dark mode</button>
您可以将所有这些放在一个函数中。不需要两个函数。添加一个默认的 class 例如灯到你的 body 然后点击按钮时改变它。因此,如果用户未设置首选项,默认情况下会显示灯光。
使用 localStorage 的好处是用户下次访问您的网站时会存储用户首选项。
点击按钮时读取localStorage。如果尚未设置任何值,请将其设置为与默认值相反的值。
window.onload = function() {
setMode();
};
function setMode() {
let mode = localStorage.getItem('mode');
if(!mode) mode = 'light';
document.body.classList.add(mode);
}
function toggleMode() {
let element = document.body;
let btn = document.getElementById("darkmode-button");
let mode = localStorage.getItem('mode')
if(!mode) mode = 'dark';
if(mode == 'dark') {
localStorage.setItem("mode", "light");
element.classList.remove("dark");
element.classList.add("light");
btn.innerHTML = 'Dark mode';
}
else {
localStorage.setItem("mode", "dark");
element.classList.remove("light");
element.classList.add("dark");
btn.innerHTML = 'Light mode';
}
}
body.light {
background: #fff;
}
body.dark {
background: #555;
}
<body class="light">
<button onclick='toggleMode()' id='darkmode-button'>Dark mode</button>
</body>
main.js:
function darkModeToggle() {
var element = document.body;
element.classList.add("darkmode");
localStorage.setItem("mode", "dark");
let mode = localStorage.getItem('mode')
if (mode === 'dark') {
document.getElementById("darkmode-button").onclick = lightModeToggle();
document.getElementById("darkmode-button").innerHTML = 'Light mode';
localStorage.setItem("mode", "light");
return false
}
}
function lightModeToggle() {
var element = document.body;
element.classList.remove("darkmode");
localStorage.setItem("mode", "light");
let mode = localStorage.getItem('mode')
console.log('Hello')
if (mode === 'light') {
localStorage.setItem("mode", "dark");
document.getElementById("darkmode-button").onclick = darkModeToggle();
document.getElementById("darkmode-button").innerHTML = 'Dark mode'
}
}
我在 home.html
中有一个按钮<button onClick='darkModeToggle' id='darkmode-button'>Dark mode</button>
但这不起作用..如果用户想要在网站中使用暗模式或亮模式,我想存储用户的设置..
为什么我当前的代码不起作用,如何解决?
您可以直接使用按钮文本来识别模式,而不是使用localStorage。你不需要两个不同的函数来改变模式。
html 中还有一个问题。 onClick 事件应如下附加。
<button onClick='toggleMode()' id='darkmode-button'>Dark mode</button>
function toggleMode() {
let buttonText = document.getElementById("darkmode-button");
var element = document.body;
if (buttonText.innerHTML === 'Light mode') {
element.classList.add("darkmode");
document.getElementById("darkmode-button").innerHTML = 'Dark mode';
}
else
{
element.classList.add("lightmode");
document.getElementById("darkmode-button").innerHTML = 'Light mode';
}
}
<button onClick='toggleMode()' id='darkmode-button'>Dark mode</button>
您可以将所有这些放在一个函数中。不需要两个函数。添加一个默认的 class 例如灯到你的 body 然后点击按钮时改变它。因此,如果用户未设置首选项,默认情况下会显示灯光。
使用 localStorage 的好处是用户下次访问您的网站时会存储用户首选项。
点击按钮时读取localStorage。如果尚未设置任何值,请将其设置为与默认值相反的值。
window.onload = function() {
setMode();
};
function setMode() {
let mode = localStorage.getItem('mode');
if(!mode) mode = 'light';
document.body.classList.add(mode);
}
function toggleMode() {
let element = document.body;
let btn = document.getElementById("darkmode-button");
let mode = localStorage.getItem('mode')
if(!mode) mode = 'dark';
if(mode == 'dark') {
localStorage.setItem("mode", "light");
element.classList.remove("dark");
element.classList.add("light");
btn.innerHTML = 'Dark mode';
}
else {
localStorage.setItem("mode", "dark");
element.classList.remove("light");
element.classList.add("dark");
btn.innerHTML = 'Light mode';
}
}
body.light {
background: #fff;
}
body.dark {
background: #555;
}
<body class="light">
<button onclick='toggleMode()' id='darkmode-button'>Dark mode</button>
</body>