Как при выборе темы оформления сохранять выбор через cookie?

86
22 июня 2021, 16:10

У меня есть простой сайт и на нём я хочу предоставить юзерам возможность менять темы оформления, к примеру есть три файла:

light.css
dark.css
yellow.css

Все три файла имеют разные стили, которые меняют оформление сайта. Создаю список:

<ul>
<li><a>Светлый стиль</a></li>
<li><a>Тёмный стиль</a></li>
<li><a>Жёлтый стиль</a></li>
</ul>

Помогите, пожалуйста, реализовать путём клика на ссылки смену дизайна, при этом чтобы выбор сохранялся при перезагрузке страницы и при переходе на другие. Как данный функционал возможно реализовать?

Answer 1

Данное решение написано на jQuery, с использованием localStorage

Для начала сделаем вёрстку в качестве меню

<!-- это в head -->
<link id="style" href="" rel="stylesheet">
<!-- это в удобное местое -->
<ul id="changeColor">
  <li data-style="light">Светлый</li>
  <li data-style="dark">Тёмный</li>
  <li data-style="knight">Рыцарь</li>
</ul>

Атрибут data-style должен быть уникален и совпадать с названием .css файла.
Это не обязательно, конечно, но так скрипт будет короче :)

Далее переходим к сценарию, тут ориентируйтесь по комментариям

// Изменение цвета и сохранение
$('#changeColor').on('click', 'li', function(){
  let style = $(this).data('style'); // Получим в переменную значение выбранного стиля
  ChangeStyle(style); // Выполняем функцию
});
// "загрузка" цвета
$(document).ready(function(){
  let loadStyle = localStorage.getItem('changeColor'); // Получим значение из localStorage
  if(loadStyle) ChangeStyle(loadStyle); // выполним функцию, если в localStorage что-то есть
});

// Функция для сохранения стиля
function ChangeStyle(style) {
  localStorage.setItem('changeColor', style); // сохраняем значение в localStorage
  $('#style').attr('href', '/'+style+'.css'); // меняем стили
}
Answer 2

Создаем кнопки в html

<input value="Светлая" onclick="light()" type="button">
<input value="Темная" onclick="dark()" type="button">
<input value="Рыцарь" onclick="knight()" type="button">

Потом в html файле в котором у тебя эти кнопки должен быть подключен css файл например со светлой темой. Создай js файл и подключи его к файлу где ты создал кнопки и где у тебя подключена светлая тема. К тегу которым ты подключал css добавляешь id

<link rel="stylesheet" href="light.css" id="theme"> 

В js пишешь:

var css 
css = document.getElementById("theme");
function light(){
   css.href = "light.css";
}
function dark(){
   css.href = "dark.css";
}
function knight(){
   css.href = "knight.css";
}
READ ALSO
Убрать повторяющийся тег

Убрать повторяющийся тег

Как можно скриптом убрать тег <br>, если подряд идут два?

113
Падает телеграмм бот на heroku

Падает телеграмм бот на heroku

Телеграмм бот на NodeJS + telegrafJS деплоится на heroku, бот работает корректно, но спустя неопределенное количество времени - падает и требует перезагрузки...

136
Не работает система реактивности Vue.js

Не работает система реактивности Vue.js

В mounted устанавливаю значение abilitiesНа странице должны выводится данные из этого свойства, но ничего не выводится

121
Как сделать подсказку для поля setCustomValidity?

Как сделать подсказку для поля setCustomValidity?

У меня есть форма регистрации, она не использует html тэг form, а работает исключительно на ajax запросахМне нужно сделать подсказки с выводом ошибок...

129