Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Замена стиля при определенном времени (https://javascript.ru/forum/dom-window/28006-zamena-stilya-pri-opredelennom-vremeni.html)

denisov 03.05.2012 09:34

Замена стиля при определенном времени
 
Доброе утро!

Такая проблемка, есть несколько элементов, примерно таких:
<div class="lok <?php
$vrsh = date("G");
if ($vrsh >= 6 & $vrsh < 9)
{
echo "morning";
}
elseif ($vrsh >= 9 & $vrsh < 18)
{
echo "day";
}
elseif($vrsh >= 18 & $vrsh < 21)
{
echo "evening";
}
else
{
echo "night";
}
?>"></div>
И еще в 2-ух местах. Смена шапки (фона. шапки и флешки). И не совсем правильно работает.

Хотелось бы примерно такое же решить в javascript.

Skipp 03.05.2012 12:35

Ну вообще-то такое обычно и решается на js так как у клиента своё время.

А в чём собственно проблема то? Тут практически всё идентично.

denisov 03.05.2012 13:09

Цитата:

Сообщение от Skipp (Сообщение 172522)
Ну вообще-то такое обычно и решается на js так как у клиента своё время.

А в чём собственно проблема то? Тут практически всё идентично.

Решение. Плохо знаком с js.
Если я правильно понял, то, скрипт в отдельный файл, "прикрепить" к страницам. А как его вызывать в коде (вставка в нескольких местах) не знаю :-?

bot87 03.05.2012 13:20

НАПОДОБИЕ ТАКОГО
<div></div>
<script>
elem=document.getElementsByTagName('div')[0]
date=new Date()
hours=date.getHours()
if(hours>6&&hours<9){
	elem.innerHTML='УТРО'
}
else{
if(hours>=9&&hours<17){
	elem.innerHTML='ДЕНЬ'
	
}
else{
elem.innerHTML='Вечер или ночь'	
}
}

denisov 03.05.2012 14:00

bot87,
3 раза указать стрипт на странице = лишний вес. Нету ли в js вывода наподоби как я указал выше? в трех местах.

Цитата:

elem=document.getElementsByTagName('div')[0]
Правильно ли я понимаю, что если заменить выделенную часть на "id", то он будет вставлен в тег с Id? (допустим <a id='div'>будет выведено</a>)
Мне просто нужно вставить в код, а именно типа <div class="np {нужный вывод}">...

tadjik1 04.05.2012 19:33

ну да, можно класснейм, можно id. как вам угодно будет =)

и трижды вычислять значение не нужно

Раед 04.05.2012 19:58

Цитата:

Сообщение от denisov
Правильно ли я понимаю, что если заменить выделенную часть на "id", то он будет вставлен в тег с Id

Не совсем, если хотите через id, то
elem=document.getElemen*!*t*/!*By*!*Id*/!*('yourid');

denisov 05.05.2012 10:10

А как вывод сделать типа:
<div id="myid" class="[вывод скрипта]"></div>
:help:

Sergey66628 05.05.2012 10:42

я может не совсем понимаю что нужно, но почему бы не создать класс, написать необходимые методы и обращаться к методам через объект класса там где это надо

Раед 05.05.2012 12:59

Sergey66628,
Что? Какой класс? Во-первых, в js нет классов. А во-вторых, зачем тут вообще дополнительные объекты?

9xakep 05.05.2012 13:08

Sergey66628,
что?? o_O
Цитата:

Сообщение от без восемь семь
НАПОДОБИЕ ТАКОГО
<div></div>
<script>
elem=document.getElementsByTagName('div')[0]
date=new Date()
hours=date.getHours()
if(hours>6&&hours<9){
    elem.innerHTML='УТРО'
}
else{
if(hours>=9&&hours<17){
    elem.innerHTML='ДЕНЬ'
     
}
else{
elem.innerHTML='Вечер или ночь'
}
}

Вот нормальный вариант, о чем ты?

denisov 05.05.2012 14:21

Цитата:

Сообщение от denisov (Сообщение 172775)
А как вывод сделать типа:
<div id="myid" class="[вывод скрипта]"></div>
:help:

Немного отошли от темы :)

9xakep 05.05.2012 15:10

А что скрипт должен делать?

denisov 05.05.2012 15:23

Цитата:

Сообщение от 9xakep (Сообщение 172818)
А что скрипт должен делать?

В первом сообщение.
Код:

Если сейчас утро, то класс у дива - morning;
Если сейчас день, то класс у дива - day;
Если сейчас вечер, то класс у дива - evening;
В других случаях - ночь.

Тобишь, <div id="myid" class="[morning | day | evening | night]"></div>

vadim5june 05.05.2012 15:38

Цитата:

Сообщение от denisov (Сообщение 172821)
Тобишь, <div id="myid" class="[morning | day | evening | night]"></div>

--------------
вместо elem.innerHTML='УТРО'
надо elem.className='utro';
итд;

denisov 05.05.2012 15:55

Цитата:

Сообщение от vadim5june (Сообщение 172823)
--------------
вместо elem.innerHTML='УТРО'
надо elem.className='utro';
итд;

<html>
<head>
<script>
elem=document.getElementById('flash');
date=new Date()
hours=date.getHours()
if(hours>6&&hours<9){
	elem.className='morning'
}
else{

if(hours>=9&&hours<17){
	elem.className='day'
	
}
else{
if(hours>=18&hours<21){
	elem.className='evering'
}
else{
elem.className='night'	
}
}
}
</script>
<style>
.day {color:red;}
</style>
</head>
<body style="background:white;">

---

НАПОДОБИЕ ТАКОГО
<div id='flash'>sdddd</div>
<div style="color:red;">ыыыыы</div>
</body>
</html>

Не работает? Или я что-то не так делаю?

P.S. Добавлено:
Через ИЕ показывает:
SCRIPT5007: Не удалось задать значение свойства "className": значением объекта является NULL или он не определен 
in.html, строка 13 символ 2

vadim5june 05.05.2012 16:39

<html>
<head>
<script>
function tim(){
var elem=document.getElementById('flash');
var date=new Date()
var hours=date.getSeconds()
if(hours>6&&hours<19){
elem.className='morning'
}
else
if(hours>=19&&hours<37){
elem.className='day'
}
else
if(hours>=38&hours<48){
elem.className='evering'
}
else{
elem.className='night'
}
};
window.onload=function(){setInterval(tim,1000)}
</script>
<style>
.morning {color:green;}
.day {color:red;}
.evering {color:blue;}
.night {color:black;}
</style>
</head>
<body style="background:white;">
<div id='flash'>color</div>
<div style="color:red;">tratata</div>
</body>
</html>

denisov 05.05.2012 16:46

Цитата:

Сообщение от vadim5june (Сообщение 172838)
<html>
<head>
<script>
function tim(){
var elem=document.getElementById('flash');
var date=new Date()
var hours=date.getSeconds()
if(hours>6&&hours<19){
elem.className='morning'
}
else
if(hours>=19&&hours<37){
elem.className='day'
}
else
if(hours>=38&hours<48){
elem.className='evering'
}
else{
elem.className='night'
}
};
window.onload=function(){setInterval(tim,1000)}
</script>
<style>
.morning {color:green;}
.day {color:red;}
.evering {color:blue;}
.night {color:black;}
</style>
</head>
<body style="background:white;">
<div id='flash'>color</div>
<div style="color:red;">tratata</div>
</body>
</html>

Посмотрел через ИЕ и ФФ, сначала черный цвет, потом (5-7 сек) присваивается зелёный, потом (5-7 сек) красный, потом синий (5-7 сек)...
Тобишь класс меняется всё это время... А мне нужно, что бы определилось какое сейчас время (лучше по серверному), и поставился клас взависимости от этого.

vadim5june 05.05.2012 16:56

ну я сделал что меняется для секунд чтобы было видно
вместо
var hours=date.getSeconds()
снова поставьте
var hours=date.getHours()
и цифры я там заменил верните прежние при сравнении
типа if(hours>=19&&hours<37)
и увеличьте интервал
setInterval(tim,1000*30*60)
-----------
серверного времени на клиенте нет да и лучше клиентское иметь ведь
когда в Москве ночь в Вашингтоне утро
ну и тестировать сутки придется

denisov 10.05.2012 09:12

Цитата:

Сообщение от vadim5june (Сообщение 172841)
ну я сделал что меняется для секунд чтобы было видно
вместо
var hours=date.getSeconds()
снова поставьте
var hours=date.getHours()
и цифры я там заменил верните прежние при сравнении
типа if(hours>=19&&hours<37)
и увеличьте интервал
setInterval(tim,1000*30*60)
-----------
серверного времени на клиенте нет да и лучше клиентское иметь ведь
когда в Москве ночь в Вашингтоне утро
ну и тестировать сутки придется

<html>
<head>
<script>
function tim(){
var elem=document.getElementById('flash');
var date=new Date()
var hours=date.getHours()
if(hours>6&&hours<9){
elem.className='morning'
}
else
if(hours>=9&&hours<18){
elem.className='day'
}
else
if(hours>=18&&hours<21){
elem.className='evering'
}
else{
elem.className='night'
}
};
window.onload=function(){setInterval(tim,1000*30*60)}
</script>
<style>
.morning {color:green;}
.day {color:red;}
.evering {color:blue;}
.night {color:black;}
</style>
</head>
<body style="background:white;">
<div id='flash'>color</div>
<div style="color:red;">tratata</div>
</body>
</html>

Проверял. Сегодня по часам у меня в 9.02, цвет - черный. По часам в 8.40 - тоже черный. Оставил страницу в 9.02, сейчас, в 9.40 поменялся на красный (день). Но при обновлении снова черный :(

vadim5june 10.05.2012 10:28

Цитата:

Сообщение от denisov (Сообщение 173531)
Но при обновлении снова черный :(

window.onload=function(){tim();setInterval(tim,100 0)}

denisov 10.05.2012 11:47

Цитата:

Сообщение от vadim5june (Сообщение 173537)
window.onload=function(){tim();setInterval(tim,100 0)}

Снова при загрузке - черный. Сейчас 11.37.:(

vadim5june 10.05.2012 12:29

Цитата:

Сообщение от denisov (Сообщение 173544)
Снова при загрузке - черный. Сейчас 11.37.:(

Не может быть-чему тут не работать то-у меня нормально

window.onload=function(){tim();setInterval(tim,100 0)}
интересно почему редактор пробел делает пишу тысячу а он пишет 100 0

melky 10.05.2012 12:39

вся отрисовка действий скрипта находится в объекте настроек.
<style>
.morning { color: #BADA55 }
.day { color: lime }
.night { color: yellow }
.evening { color: #757575 }
</style>
<div class="changeable"> я меняю цвет! это как ёлка, только я как div </div>

<span class="changeable">и я тоже :)</span>

<script>
 // настройки
window['depended class options'] = {
  'onchange': function(time, lastTime){ // тут отображаем класс на указанных элементах
    Array. // всем
      prototype. // элементам
        forEach. // с классом, имеющим "changeable"
          call(document.querySelectorAll("*[class*=changeable]"), 
               function(element){
                 element.classList.add(time); // добавить в класс текущее время
                 if(lastTime){ // и, если есть старое (при запуске старого нет)
                   element.classList.remove(lastTime); // удалить его.
                 }
                });
  },
  'interval': 1e4*60 // интервал проверки - 10 минут
};

(function(d){function e(){var e=f;a:{var b,g=(new Date).getHours(),a;for(b in c)if("string"===typeof c[b]&&(a=b.split("-"),c[b]=[+a[0],+a[1],c[b]]),a=c[b],g>=a[0]&&g<a[1]){f=a[2];break a}f=void 0}d.onchange&&d.onchange.call(void 0,f,e)}var f,c={"6-12":"morning","12-18":"day","18-24":"evening","0-25":"night"};e();d.id=setInterval(e,d.interval)})(window["depended class options"]);
</script>

denisov 10.05.2012 15:49

Цитата:

Сообщение от vadim5june (Сообщение 173547)
Не может быть-чему тут не работать то-у меня нормально

window.onload=function(){tim();setInterval(tim,100 0)}
интересно почему редактор пробел делает пишу тысячу а он пишет 100 0

Спасибо, теперь полностью работает :)


Часовой пояс GMT +3, время: 16:20.