Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.03.2019, 04:28
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Как вывести <div> с поздравлением?
Как можно изменить скрипт чтобы он выводил див не целый день, а только с определённого времени, например с 12 часов дня 30 декабря и до 24 часов 31 декабря выводилось с наступающим новым годом, а с 00:00:00 1 января просто с новым годом и до 24 часов 3 января, и что бы див выводился не только 23 февраля а по разным праздникам и менялся текст поздравления, например Рождество с 3 часов ночи 6.01 с наступающим а 7.01 с рождеством, и так далее, 18:00 22.02 плюс 23.02, 15:00 7.03 и 8.03 и так далее3
(function(date){
if(date.getDate() == 23 && date.getMonth() + 1 == 2 )
  document.write('<div>23 февраля</div>');
}(new Date()))
Ответить с цитированием
  #2 (permalink)  
Старый 08.03.2019, 04:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Вы же сами пишите, о наступающем, 23, дне металлурга, и прочих, а код пытаетесь писать в лоб - если равно 23 и плюс/минус... А что, для каждого праздника свой код в таком случае будет? Ну наверное же сначала нужно создать объект определяющий праздники, тексты поздравлений и условия их вывода, нечто типа:

{
    номер месяца: {
        день: {старт: метка времени, продолжительность: часов, вывод: текст},
        день: {старт: метка времени, продолжительность: часов, вывод: текст},
        ....
   },
   ....
}


И единственный код, проверяющий наличие в объекте текущего месяца и дня, и при наличие запускающее таймер в указанное время с указанной продолжительностью.
Ответить с цитированием
  #3 (permalink)  
Старый 08.03.2019, 05:11
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

я думала надо одно событие 'наступающий' (старт финиш)
второе событие 'наступивший' (старт финиш)
старт может быть с точностью до часа а финиш всегда с точностью до числа
Ответить с цитированием
  #4 (permalink)  
Старый 08.03.2019, 05:17
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

вернее старт финиш текст-картинка
Ответить с цитированием
  #5 (permalink)  
Старый 08.03.2019, 05:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Что же вы сразу с головой да в конкретику, когда задачу свою представляете только как "Хочу, а как?". Какая разница чего вы хотите показать, картинку или текст, это разве определяющее главное в задаче? Это всего лишь "что", а нужно еще определить когда это "что" показать и нужно ли.

Должен быть единственный код, который обслуживает условия описывающие все праздники по единым правилам (параметрам), будь это хоть Христа праздник, хоть День работника торговли. А если у какого либо праздника есть своя "фишка", то у всех праздников это в условиях описано как false или вообще отсутствует, а тех у кого есть, то это либо, опять таки, по единому сценарию "фишек" выводится, либо это ссылка на индивидуальные функции.

Вы не должны задумываться на тем равен ли день 23 или иному числу, вы должны искать этот день в описателе праздников, в котором хоть свой праздник учреждайте, или 8 марта начинайте праздновать с 23 февраля, по 1 сентября. Код при этом ни сколь не должен изменяться.

Если бы пользователь зашел и вышел, достаточно было просто проверять - есть в описании, значит показали, или уже время закончилось и не показываем. Но он же может войти и шарахаться по страницам не смотря на то, что пора уже пить. А значит должен быть таймер сканирующий описатель праздников на наличие в нем свойства равного текущему времени. А найдя такое свойство, отображает поздравление, после чего уже не сканирует описатель, а трудится над тем когда закрыть поздравление.

Опишите у себя вначале все составляющие своей задачи, определите что и как должно выполняться, напишите код выполняющий, а затем просто добавляйте в объект параметры для него. А то как-то не с той стороны вы заходите.
Ответить с цитированием
  #6 (permalink)  
Старый 08.03.2019, 07:01
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Не знаю правильно ли это
(function(date){
if(date.getHours() >= 12 && date.getDate() == 30 && date.getMonth() + 1 == 12 && <= date.getDate() == 31 && date.getMonth() + 1 == 12) document.write('<div class="holidays">С наступающим новым годом !!!</div>');
else if(date.getDate() >= 1 && date.getMonth() + 1 == 1 && <= date.getDate() == 3 && date.getMonth() + 1 == 1) document.write('<div class="holidays">С новым годом !!!</div>');
else if(date.getHours() >= 15 && date.getDate() == 6 && date.getMonth() + 1 == 1 && <= date.getDate() == 6 && date.getMonth() + 1 == 1) document.write('<div class="holidays">С наступающим Рождеством !!!</div>');
else if(date.getDate() >= 7 && date.getMonth() + 1 == 1 && <= date.getDate() == 7 && date.getMonth() + 1 == 1) document.write('<div class="holidays">С Рождеством !!!</div>');
else if(date.getDate() >= 23 && date.getMonth() + 1 == 2 && <= date.getDate() == 23 && date.getMonth() + 1 == 2) document.write('<div class="holidays">С 23 февраля !!!</div>');
else if(date.getDate() >= 8 && date.getMonth() + 1 == 3 && <= date.getDate() == 8 && date.getMonth() + 1 == 3) document.write('<div class="holidays">С 8 марта !!!</div>');
 }(new Date()))
Ответить с цитированием
  #7 (permalink)  
Старый 08.03.2019, 07:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Блондинка
Не знаю правильно ли это
А вы как думаете? Только и остается сказать спасибо, что не каждый день праздник.

Ну я вам о чем рассказывал? Ну ежику же понятно, что ваш код расточителен. Вот так упрощенно (не буду я таймеров запускать и прочего делать), код должен не конкретное в куче условий проверять, а брать для проверки параметры описанные объектом для всех праздников, по одним и тем же правилам.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<style>
.holiday {
    text-align: center;
}
</style>
</head>
<body>
<script type="text/javascript">
var holidays = {
    '3': {
        '8': {'start': 8, 'duration': 12, 'compliments': '<img src="https://s0.tchkcdn.com/g-lScF7M4CSF9uPeXq54QRNw/4/22014/640x640/w/0/792c2e17f080c8b4461a3467a34bdf9e_398733855.jpg">'},
        '9': {'start': 12, 'duration': 2, 'compliments': 'Поздравление с Днем счастливых!'}    
    }
}, d = new Date(), m;

if((m = holidays[d.getMonth()+1]) && m[d.getDate()]) {
    //можно записывать в сессионное хранилище условие (метку окончания показа)
    //и проверяя ее в ней, если она есть, сразу отображаем поздравление и запускаем таймер окончания
    //в противном случае запускаем таймер сканирующий время на соответствие началу старта поздравления
    //и при этом событии пишем метку окончания в сессию
    //конечное сравнение для старта, это
    m = m[d.getDate()];
    if(d.getHours()>=m.start) {
        var b = document.createElement('div');
        b.className = 'holiday';
        b.innerHTML = m.compliments;
        document.querySelector('body').appendChild(b)
    }  
}
</script>
</body>
</html>


Код выполняющий объект описатель праздников никак не должен изменяться при добавлении новых праздников, удалении и прочем. Вы же пишите как поете о том, что вижу. Ну также нельзя подходить к решению задач.

PS. И да, если под Блондинкой действительно женщина, то с праздником!

Последний раз редактировалось laimas, 08.03.2019 в 08:43.
Ответить с цитированием
  #8 (permalink)  
Старый 08.03.2019, 08:37
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

laimas,
Спасибо большое, за поздравления...
Ответить с цитированием
  #9 (permalink)  
Старый 08.03.2019, 09:35
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

P. S. если кто-то в свободное время посещает в игре варвары(barbars) 'таву' и общий чат то должны меня знать под этим же ником...
Ответить с цитированием
  #10 (permalink)  
Старый 26.03.2019, 11:21
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Как правильно указать дату в такой строке
d = new Date(),
если год со знаком минус, ну типа до н. э.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести баннер при помощи JavaScript? FRILITE Общие вопросы Javascript 4 23.03.2016 05:18
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Вывести на печать DIV как его видно в браузере (с учетом фона с стилей) unomomento Элементы интерфейса 3 28.12.2013 00:43
Как приплюсовать 3 inputa и вывести, сообщение. ainur777 Элементы интерфейса 2 10.11.2013 15:33
Как вывести переменную из javascript в html код? red-nicolas Элементы интерфейса 3 25.02.2012 13:27