Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.07.2021, 01:39
Аспирант
Отправить личное сообщение для tp-20 Посмотреть профиль Найти все сообщения от tp-20
 
Регистрация: 19.06.2018
Сообщений: 48

localStorage - несколько классов
Здравствуйте!
Есть простой переключатель тем (светлая/тёмная).
https://codepen.io/mirandalwashburn/pen/wZmZLz

Там в JS коде передаётся только один класс.
Как добавить ещё несколько классов?
Т.е. нужно стилизовать несколько классов.

Так не получилось:
localStorage.toggled != 'dark, another-dark'
localStorage.toggled != 'dark' or 'another-dark'

В этом кусочке: 'dark'

if (localStorage.toggled != 'dark') {
    $('#main, p').toggleClass('dark', true);
    localStorage.toggled = "dark";


Продублирую тут весь код:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<main id="main">
  <p> Click to toggle dark mode </p>
  <label class="switch">
    <input type="checkbox" onclick="darkLight()" id="checkBox" >
    <span class="slider"></span>
  </label>
</main>

<style>
body {
  margin: 0;
  padding: 0;
}
main {
  height: 100vh;
  width: 100vw;
  transition: background 0.3s ease;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
main p {
  align-self: center;
  font-family: sans-serif;
  transition: color 0.3s ease;
}
/*TOGGLE COLORS*/
.dark {
  background: #545454;
  color: #efefef;
}
p {
  background: none !important;
}
/*SWITCH*/
.switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
  align-self: center;
}

.switch input {
  opacity: 0;
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  -webkit-transition: 0.4s;
  transition: 0.4s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  -webkit-transition: 0.4s;
  transition: 0.4s;
}

input:checked + .slider {
  background-color: #2196f3;
}

input:checked + .slider:before {
  -webkit-transform: translateX(26px);
  -ms-transform: translateX(26px);
  transform: translateX(26px);
}

/* Rounded sliders */
.slider {
  border-radius: 30px;
}

.slider:before {
  border-radius: 50%;
}
</style>
<script>

$('#main').toggleClass(localStorage.toggled);

function darkLight() {
  /*DARK CLASS*/
  if (localStorage.toggled != 'dark') {
    $('#main, p').toggleClass('dark', true);
    localStorage.toggled = "dark";
     
  } else {
    $('#main, p').toggleClass('dark', false);
    localStorage.toggled = "";
  }
}

/*Add 'checked' property to input if background == dark*/
if ($('main').hasClass('dark')) {
   $( '#checkBox' ).prop( "checked", true )
} else {
  $( '#checkBox' ).prop( "checked", false )
}

</script>
Ответить с цитированием
  #2 (permalink)  
Старый 05.07.2021, 07:43
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Сообщение от tp-20
Как добавить ещё несколько классов?
У тебя в коде везде фигурирует только строка "dark"...

Т.ч. стоит придумать какой-то другой "семафор" или изменить хранение данных в localStorage.
Ответить с цитированием
  #3 (permalink)  
Старый 05.07.2021, 07:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Например проверять не на равенство/не _равенство, а на вхождение.
Тогда хранить можно весь набор классов
localStorage.toggled != 'dark another-dark'
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2021, 14:34
Аспирант
Отправить личное сообщение для tp-20 Посмотреть профиль Найти все сообщения от tp-20
 
Регистрация: 19.06.2018
Сообщений: 48

ksa,
вопрос пока не решился.
localStorage.toggled != 'dark another-dark' - здесь мне нужно перечислить классы, которые будут сохраняться при перезагрузке страницы, при переходе по ссылкам.

Сейчас сохраняется только класс dark. Остальные сбрасываются.

Я думал, что классы перечисляются через запятую или через оператор OR. Вы написали просто через пробел, но это тоже не сработало.
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2021, 14:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

tp-20,
https://javascript.ru/forum/css-html...tml#post531438
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2021, 16:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Сообщение от tp-20
Я думал, что классы перечисляются через запятую или через оператор OR
Смотря что ты называешь "перечислением"...
У элемента они указываются именно через пробел.

<p class='cls1 cls2 cls3'>...</p>


Сообщение от tp-20
но это тоже не сработало
Значит что-то не так делаешь...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить классов к несколько элементов подряд ethereal Элементы интерфейса 1 14.02.2021 23:50
LocalStorage удаление данных neon_tmn Общие вопросы Javascript 8 21.10.2016 15:22
Можно ли объединить несколько классов? zazula (X)HTML/CSS 3 14.12.2014 11:40
Knockout добавить несколько классов svs Библиотеки/Тулкиты/Фреймворки 0 10.07.2014 16:22
Не сохраняется localStorage после перезагрузки браузера Бобр Firefox/Mozilla 1 20.10.2011 20:31