|
Замена стилей
Здравствуйте. Хочу реализовать переключатель со светлой темы на тёмную. Пытаюсь подключить стили вот таким способом
<a href="#" oncl ick="changeCSS('/dark.css', 0);">тёмный</a> | <a href="#" oncl ick="changeCSS('/template_styles.css', 0);">светлый</a>
function changeCSS(cssFile, cssLinkIndex) {
var oldlink = document.getElementsByTagName("link").item(cssLinkIndex);
var newlink = document.createElement("link");
newlink.setAttribute("rel", "stylesheet");
newlink.setAttribute("type", "text/css");
newlink.setAttribute("href", cssFile);
document.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink);
}
Но к сожалению стили подключаются частично. Если же я прописываю стили напрямую в шаблоне <link rel="stylesheet" href="/dark.css"> в <head>, то стили ломают светлую тему и всё тогда нормально. Как мне подключить тёмную тему шаблона через кнопку ? |
vitalso78,
меняйте class body. |
А можно по подробней пожайлуста, с примером. А то я дуб дубом.
|
|
Ну как бы понятно, но не совсем. В примере меняеться лишь один фон. А как сделлать ссылкой на файл css ? У меня css более 210777 строк. Вы предстовляете как будет выглядеть страница html ,?
|
vitalso78,
при клике записывайте название файла в localStorage, перезагружайте страницу, и грузите то что записали. |
Можно так сделать:
/index.html
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
<link rel="stylesheet" href="/src/dark.css" id="theme-css-file" />
<script src="/src/index.js"></script>
</head>
<body>
<div>Switch theme:</div>
<button type="button" data-set-theme-file="/src/light.css">Light</button>
<button type="button" data-set-theme-file="/src/dark.css">Dark</button>
</body>
</html>
/src/dark.css
body {
background: #333;
color: #fff;
}
/src/light.css
body {
background: #eee;
color: #333;
}
/src/index.js
window.addEventListener("click", function (e) {
const selector = "[data-set-theme-file]";
let target = e.target;
if (
!target ||
!target.matches ||
(!target.matches(selector) && !(target = target.closest(selector)))
) {
return;
}
const newCssFilePath = target.getAttribute("data-set-theme-file");
const styleElement = document.querySelector("#theme-css-file");
if (!newCssFilePath || !styleElement) {
return;
}
styleElement.href = newCssFilePath;
});
|
Смотрите. Я нашол выход из положения. Но к сожалению при переключении стилей они не сохраняются - они сохроняются до перезагрузки страница, далее нужно опять нажимать кнопку. Как мне сделать, что дописать, что бы новые стили сохронялись после перезагрузки страницы, до нажатия кнопки в обратное состояние старых стилей ? Тоесть. Включил я тёмный цвет, походил по страницам сайта, и потом опять переключил на светлый.
window.onload = function() {
document.getElementById('SuperButton').onclick = function()
{
if(document.body.className != 'new_class')
{
document.body.className = 'new_class';
}
else
{
document.body.className = '';
}
}
}
$(function(){
$('.switch-btn').click(function (e, changeState) {
if (changeState === undefined) {
$(this).toggleClass('switch-on');
}
if ($(this).hasClass('switch-on')) {
$(this).trigger('on.switch');
} else {
$(this).trigger('off.switch');
}
});
$('.switch-btn').on('on.switch', function(){
console.log('Кнопка переключена в состояние on');
});
$('.switch-btn').on('off.switch', function(){
console.log('Кнопка переключена в состояние off');
});
$('.switch-btn').each(function(){
$(this).triggerHandler('click', false);
});
});
|
Цитата:
Если таковой регистрации нет - можно записать в localStorage, потом читать от туда и правильно устанавливать тему... |
У меня регистрация есть. Мне нужно и с регистрацией и без. Ну вот я дал коды.Что мне нужно изменить ?
|
| Часовой пояс GMT +3, время: 07:51. |
|