Помощник
|
[JS] заставить таймер "идти" по кругу |
scanread
|
Сообщение
#1
|
||
|
|
||
|
|||
tszyan |
26.4.2013, 20:39;
Ответить: tszyan
Сообщение
#2
|
|
scanread,
Что-то в коде ереси много... <span id="label"></span> $(function(){ setInterval(function(){ var date = new Date(); var h = date.getHours(); var m = date.getMinutes(); if ( h == 21 && m > 30 && m < 40){ $('#label').text('Text...'); } else { $('#label').text(''); } }, 30*1000); }); Если нужна точность больше 30 сек, то можно поставить более короткий интервал. 30*1000 Или извратиться и при запуске определить сколько сейчас секунд, затем установить таймер (setTimeout) на количество секунд оставшееся до 00 секунд. И уже в этом таймере запустить setInterval с периодичностью 60*1000. Или при запуске посчитать сколько осталось до 21.30 и запустить таймер с оставшимся временем, а внутри него setInterval с периодичностью в сутки. И второй таймер но уже на 21.40. Один будет показывать надпись, другой прятать. Сообщение отредактировал tszyan - 26.4.2013, 20:45 |
|
|
scanread
|
Сообщение
#3
|
|
tszyan, да в коде как раз то что надо, поскольку учитывается время по РФ, как и нужно, а не по тому, как у меня в Украине.
else { $('#label').text(''); } таймер нужен чтобы шел дальше, а не пустая строка) -------------------- |
|
|
artanik |
26.4.2013, 22:39;
Ответить: artanik
Сообщение
#4
|
|
Ошибка в условии
if ((h == 21 && m >= 30) || (h == 21 && m < 40)) Нужно вместо логического ИЛИ указать логическое И if ((h == 21 && m >= 30) && (h == 21 && m < 40)) Через минуту будет время, а не надпись http://jsbin.com/ifodad/1 -------------------- Нужна качественная вёрстка сайтов? Обращайтесь: ICQ 555-177-362 |
|
|
rjksdfhe |
27.4.2013, 0:03;
Ответить: rjksdfhe
Сообщение
#5
|
|
artanik прав, на самом деле условие неправильное, т.е. всегда при h=21 оно true.
Неправильно обрабатывался период с 21:00.00 по 21:59.60. Дальше, что будет после 22:00.00 копать не стал, заморочено и не интересно. А по комментарию tszyan тоже согласен, что очень заморочено. И надо бы уже понимать, что время по MSK (что хочется) от его примера (время по юзеру) отличается только функциями класса Date: date.getHours(); date.getMinutes(); vs d.getUTCMinutes() d.getUTCHours () Сообщение отредактировал rjksdfhe - 26.4.2013, 23:58 |
|
|
tszyan |
27.4.2013, 0:54;
Ответить: tszyan
Сообщение
#6
|
|
tszyan, да в коде как раз то что надо, поскольку учитывается время по РФ, как и нужно, а не по тому, как у меня в Украине. Извиняюсь, из "ТЗ" это было непонятно Но про ересь я слов обратно не возьму! Тогда так. function pad(n){ return n > 9 ? n : '0' + n; } $(function(){ setInterval(function(){ var date = new Date(); date.setHours(date.getHours() + 4, date.getMinutes() + date.getTimezoneOffset()); var h = date.getHours(); var m = date.getMinutes(); if ( h == 21 && m >= 30 && m < 40){ $('#label').text('Text...'); } else { $('#label').text(pad(h) + ':' + pad(m)); } }, 30*1000); }); Избегаем: if (h > 24) h -= 24; и прочей непонятной математики с временем. if ((h == 21 && m >= 30) && (h == 21 && m < 40)) artanik, два раза проверять h - это лишнее, но в целом замечание верное... а я то даже не думал проверять условия, просто с нуля написал =) Сообщение отредактировал tszyan - 27.4.2013, 1:07 |
|
|
scanread
|
Сообщение
#7
|
|
tszyan, хм, а чего он считает вперед, а не обратно?
-------------------- |
|
|
tszyan |
27.4.2013, 8:20;
Ответить: tszyan
Сообщение
#8
|
|
scanread,
Видимо ТЗ совсем некудышное. Если Вы по-прежнему отстаиваете математику, то вот: function pad(n){ return n > 9 ? n : '0' + n; } $(function(){ setInterval(function(){ var date = new Date(); date.setHours(date.getHours() + 4, date.getMinutes() + date.getTimezoneOffset()); var h = date.getHours(); var m = date.getMinutes(); if ( h == 21 && m >= 30 && m < 40){ $('#label').text('Text...'); } else { var countdown = new Date(); countdown.setHours(21 - h , 30 - m); $('#label').text(pad(countdown.getHours()) + ':' + pad(countdown.getMinutes())); } }, 3*1000); }); Код должен быть читабельным и понятным. Ну... хороший код. Это, конечно, если мы не говорим про защиту, минификацию и обфускацию. |
|
|
scanread
|
Сообщение
#9
|
|
Видимо ТЗ совсем некудышное Согласен) Еще вопрос, можно как-то вставить звук какой-то для проигрывания при достижении нужного времени if ( h == 21 && m >= 30 && m < 40)? Искал в инете как в JS подключить, ничего нету, рекомендуют везде юзать флеш для кроссбраузерности, который, к несчастью, пока не подходит для решения. Хотя бы какой простой звук "пилик-пилик" (как системный в виндовс). -------------------- |
|
|
artanik |
27.4.2013, 13:28;
Ответить: artanik
Сообщение
#10
|
|
Недавно воспроизводил звуки на HTML5, если подойдёт такой вариант(по кроссбраузерности), то вот код:
<audio id="audio"></audio>
<script> if ( h == 21 && m >= 30 && m < 40) { var audio = document.getElementById('audio'); var canPlayType = audio.canPlayType("audio/ogg"); if(canPlayType.match(/maybe|probably/i)) { audio.src = 'source/bg_cover.ogg';//FireFox } else { audio.src = 'source/bg_cover.mp3';//Chrome, Safari, Opera } if(typeof HTMLAudioElement == 'object' || typeof HTMLAudioElement == 'function') { audio.play(); } } </script> Сообщение отредактировал artanik - 27.4.2013, 13:31 -------------------- Нужна качественная вёрстка сайтов? Обращайтесь: ICQ 555-177-362 |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Требуется помощь по сайту на "ВордПресс" Закрылся доступ в панель администратора |
16 | Tia2 | 2398 | Сегодня, 21:34 автор: Arsenwenger |
|
Хостинг "Hostland" - качественный хостинг по разумным ценам и со своей Панелью Управления | 0 | artmeteor | 583 | 18.4.2024, 22:46 автор: artmeteor |
|
⭐⭐⭐ Google Voice | Gmail - OLD аккаунты "SMS и звонки" ⭐⭐⭐ | 15 | Chekon | 4470 | 18.4.2024, 12:00 автор: Chekon |
|
✅ sms.chekons.com - ⭐ Сервис для получения SMS на реальные номера USA "Non-VoIP, безлим SMS, API" ⭐ Сервис для получения SMS на реальные номера USA |
13 | Chekon | 4100 | 18.4.2024, 11:48 автор: Chekon |
|
Опрос: Результаты в упражнении "Жим лёжа" у вэбмастеров | 35 | Room | 4534 | 13.3.2024, 13:10 автор: Room |
Текстовая версия | Сейчас: 25.4.2024, 21:36 |