Сохранить позицию переключения при обновлении страницы - PullRequest
0 голосов
/ 16 апреля 2020

Я использую 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%;
}

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете установить свойство value флажка:

document.getElementById("theme").checked = localStorage.getItem("theme") === "dark-mode";

Обратите внимание, что этот код должен запускаться после обработки элемента флажка . Я бы предложил вставить элемент <script> сразу после элемента checkbox с этим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...