Смена стилей нажатием на кнопку
Здравствуйте
На сайте использую данный код для смены стилей css
<link id="dyncss" rel="stylesheet" type="text/css" href="">
<script type="text/javascript">
function setDynCSS(url) {
if (!arguments.length) {
url = (url = document.cookie.match(/\bdyncss=([^;]*)/)) && url[1];
if (!url) return '';
}
document.getElementById('dyncss').href = url;
var d = new Date();
d.setFullYear(d.getFullYear() + 1);
document.cookie = ['dyncss=', url, ';expires=', d.toGMTString(), ';path=/;'].join('');
return url;
}
setDynCSS();
</script>
<img style="cursor:pointer;" src="Ссылка на картинку 1" onclick="setDynCSS('Ссылка на стиль 1.css')">
<img style="cursor:pointer;" src="Ссылка на картинку 1" onclick="setDynCSS('Ссылка на стиль 2.css')">
Скрип работает. Меняет фон сайта (светлый/темный) при нажатии на кнопки и запоминает его. Проблема только одна, при выборе светлого фона сайта изначально загружается темный фон (который стоит по умолчанию на сайте) , а потом сам меняется на светлый. Как можно выполнять js до появления основного стиля сайта? Подойдет любой другой вариант который не покажет пользователю разницу между стилями при загрузке стиля исполняемого js. |
ddro3doff,
измените логику скрипта и не грузите по умолчанию ничего
function setDynCSS(url) {
if (!arguments.length) {
url = (url = document.cookie.match(/\bdyncss=([^;]*)/)) && url[1];
if (!url) url = '2.css';
}
else {
var d = new Date();
d.setFullYear(d.getFullYear() + 1);
document.cookie = ['dyncss=', url, ';expires=', d.toGMTString(), ';path=/;'].join('');
}
document.getElementById('dyncss').href = url;
}
setDynCSS();
|
Спасибо. Все работает
|
Цитата:
Например style.css и engene.css менялись на style1.css и engene1.css |
Цитата:
нужен объект {ночь : [ссылки], день : [ссылки]} |
ddro3doff,
<link id="dyncss" rel="stylesheet" type="text/css" href="">
<link id="engcss" rel="stylesheet" type="text/css" href="">
<img style="cursor:pointer;" src="Ссылка на картинку 1" onclick="setDynCSS('dark')">
<img style="cursor:pointer;" src="Ссылка на картинку 1" onclick="setDynCSS('light')">
<script>
function setDynCSS(url) {
if (!arguments.length) {
url = (url = document.cookie.match(/\bdyncss=([^;]*)/)) && url[1];
if (!url) url = 'dark';
}
else {
var d = new Date();
d.setFullYear(d.getFullYear() + 1);
document.cookie = ['dyncss=', url, ';expires=', d.toGMTString(), ';path=/;'].join('');
}
var cssObj = {'dark' : ['style.css', 'engene.css'], 'light' : ['style1.css', 'engene1.css']}
if(url in cssObj){
document.getElementById('dyncss').href = cssObj[url][0];
document.getElementById('engcss').href = cssObj[url][1];
}
}
setDynCSS();
</script>
|
Цитата:
|
Цитата:
сотрите куки или замените dyncss на любое другое слово, строки 9 и 15. |
Цитата:
Только опять одно"НО" Убрал из основной стиль
<link href="{THEME}/css/engine.css" type="text/css" rel="stylesheet">
Добавил
<img style="cursor:pointer;" src="/templates/Default/images/off.png" onclick="setDynCSS('dark')">
<img style="cursor:pointer;" src="/templates/Default/images/on.png" onclick="setDynCSS('light')">
<script>
function setDynCSS(url) {
if (!arguments.length) {
url = (url = document.cookie.match(/\bdyncss=([^;]*)/)) && url[1];
if (!url) url = 'dark';
}
else {
var d = new Date();
d.setFullYear(d.getFullYear() + 1);
document.cookie = ['dyncss=', url, ';expires=', d.toGMTString(), ';path=/;'].join('');
}
var cssObj = {'dark' : ['{THEME}/css/main.css', '{THEME}/css/engene.css'], 'light' : ['{THEME}/css/main2.css', '{THEME}/css/engene1.css']}
if(url in cssObj){
document.getElementById('dyncss').href = cssObj[url][0];
document.getElementById('engcss').href = cssObj[url][1];
}
}
setDynCSS();
</script>
main.css и main2.css меняется, а engene.css и engene1.css не подхватывает из скрипта. |
ddro3doff,
<link id="engcss" rel="stylesheet" type="text/css" href=""> второй линк добавили? |
Цитата:
Спасибо за терпение :thanks: |
ddro3doff,
скрипт и теги link перенесите как можно выше в head |
Пробовал, все ровно не успевает.
|
ddro3doff,
пока не могу ничего добавить, может специалисты по дизайну что-то предложат. |
ddro3doff,
может вам грузить всё сразу, а смену стилей сделать через смену класса body. |
Цитата:
|
рони,
Вот нашел пример рабочего скрипта на сайте , только вот как он добился такого результат? https://akniga.org/ |
смена темы оформления
ddro3doff,
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
body.dark {
background-color: #000000;
color: #FFFFFF;
}
</style>
</head>
<body>
<script>
function setTheme(theme) {
document.body.classList.remove('dark', 'light');
if(!theme) theme = localStorage.getItem('theme') || 'dark';
else {localStorage.setItem('theme', theme) };
document.body.classList.add(theme)
}
setTheme();
</script>
<h1>test</h1>
<img style="cursor:pointer;" src="/templates/Default/images/off.png" onclick="setTheme('dark')">
<img style="cursor:pointer;" src="/templates/Default/images/on.png" onclick="setTheme('light')">
</body>
</html>
|
Цитата:
скрипт ставить сразу после <body> |
А кроме body еще можно класс какой нибудь подменить?
Например .action-buttons { height: 100%; width: 100%; margin-left: 0px; background: #151617; float: left; } |
Цитата:
уже достаточно body.dark .action-buttons{ пишите тут что вам нужно } |
| Часовой пояс GMT +3, время: 15:26. |