Смена стилей нажатием на кнопку
Здравствуйте
На сайте использую данный код для смены стилей 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=""> второй линк добавили? |
| Часовой пояс GMT +3, время: 14:22. |