Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2020, 14:17
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Смена стилей нажатием на кнопку
Здравствуйте
На сайте использую данный код для смены стилей 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.
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2020, 14:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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();
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2020, 15:00
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Спасибо. Все работает
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2020, 15:40
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Сообщение от рони Посмотреть сообщение
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();
А возможно что бы одновременно менялись 2 фаила css?
Например style.css и engene.css менялись на style1.css и engene1.css
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2020, 16:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от ddro3doff
А возможно
да, можно сколько угодно. наверняка есть примеры на форуме, поищите.
нужен объект {ночь : [ссылки], день : [ссылки]}
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2020, 17:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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>
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2020, 20:00
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Сообщение от рони Посмотреть сообщение
ddro3doff,
измените логику скрипта и не грузите по умолчанию ничего
Все замечательно. Спасибо. Но,если умолчанию не указывать css, то для нового юзера сайт загружается без стилей. После первого нажатия на кнопку день или ночь все нормализуется.Как бы При первом заходе отдавать фаил юзеру, а после нажатbя на день/ночь больше его не юзать?

Последний раз редактировалось ddro3doff, 14.05.2020 в 20:14.
Ответить с цитированием
  #8 (permalink)  
Старый 14.05.2020, 20:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от ddro3doff
то для нового юзера сайт загружается без стилей.
у нового будет dark!
сотрите куки или
замените dyncss на любое другое слово, строки 9 и 15.
Ответить с цитированием
  #9 (permalink)  
Старый 14.05.2020, 22:28
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Сообщение от рони Посмотреть сообщение
у нового будет dark!
сотрите куки или
замените 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 не подхватывает из скрипта.
Ответить с цитированием
  #10 (permalink)  
Старый 14.05.2020, 22:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

ddro3doff,
<link id="engcss" rel="stylesheet" type="text/css" href="">
второй линк добавили?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать задержку при закрытии модального окна нажатием на кнопку? Alex_White Общие вопросы Javascript 1 06.02.2020 00:34
Смена фонового изображения по кругу, по клику на одну кнопку Manoftheyear Элементы интерфейса 7 21.03.2016 06:45
Заменить "submit" нажатием на кнопку. tte Общие вопросы Javascript 2 09.05.2015 17:35
Смена стилей страницы при изменении размера окна браузера goooooch Javascript под браузер 6 19.11.2011 18:49
Смена css стилей stvord Элементы интерфейса 5 03.09.2011 21:10