Я использую localStorage для переключения темного / светлого режима на моем WordPress-сайте на localhost. Все работает, как и ожидалось, но положение переключателя всегда возвращается к «светлому» при обновлении страницы или посещении другой страницы.
Это код, который я использую:
(function() {
let onpageLoad = localStorage.getItem("theme") || "";
let element = document.body;
element.classList.add(onpageLoad);
document.getElementById("theme").textContent =
localStorage.getItem("theme") || "light";
})();
function themeToggle() {
let element = document.body;
element.classList.toggle("dark-mode");
let theme = localStorage.getItem("theme");
if (theme && theme === "dark-mode") {
localStorage.setItem("theme", "");
} else {
localStorage.setItem("theme", "dark-mode");
}
document.getElementById("theme").textContent = localStorage.getItem("theme");
}
HTML
<div class="slider-div">
<span class="slider-text">Light Mode</span>
<label class="switch">
<input type="checkbox" onclick="themeToggle()" id="theme">
<span class="slider round"></span>
</label>
<span class="slider-text">Dark Mode</span>
</div>
Здесь CSS, который я использовал для флажка :
.switch {
position: relative;
display: inline-block;
width: 54px;
height: 22px;
}
.switch input {
display: none;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #CCC;
-webkit-transition: .6s;
transition: .6s;
}
.slider:before {
position: absolute;
content: "";
height: 15px;
width: 15px;
left: 7px;
bottom: 4px;
background-color: #FFF;
-webkit-transition: .6s;
transition: .6s;
}
input:checked+.slider {
background-color: #2196F3;
}
input:focus+.slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked+.slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}