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()))
|
|
08.03.2019, 04:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Вы же сами пишите, о наступающем, 23, дне металлурга, и прочих, а код пытаетесь писать в лоб - если равно 23 и плюс/минус... А что, для каждого праздника свой код в таком случае будет? Ну наверное же сначала нужно создать объект определяющий праздники, тексты поздравлений и условия их вывода, нечто типа:
{
номер месяца: {
день: {старт: метка времени, продолжительность: часов, вывод: текст},
день: {старт: метка времени, продолжительность: часов, вывод: текст},
....
},
....
}
И единственный код, проверяющий наличие в объекте текущего месяца и дня, и при наличие запускающее таймер в указанное время с указанной продолжительностью.
|
|
08.03.2019, 05:11
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
я думала надо одно событие 'наступающий' (старт финиш)
второе событие 'наступивший' (старт финиш)
старт может быть с точностью до часа а финиш всегда с точностью до числа
|
|
08.03.2019, 05:17
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
вернее старт финиш текст-картинка
|
|
08.03.2019, 05:41
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Что же вы сразу с головой да в конкретику, когда задачу свою представляете только как "Хочу, а как?". Какая разница чего вы хотите показать, картинку или текст, это разве определяющее главное в задаче? Это всего лишь "что", а нужно еще определить когда это "что" показать и нужно ли.
Должен быть единственный код, который обслуживает условия описывающие все праздники по единым правилам (параметрам), будь это хоть Христа праздник, хоть День работника торговли. А если у какого либо праздника есть своя "фишка", то у всех праздников это в условиях описано как false или вообще отсутствует, а тех у кого есть, то это либо, опять таки, по единому сценарию "фишек" выводится, либо это ссылка на индивидуальные функции.
Вы не должны задумываться на тем равен ли день 23 или иному числу, вы должны искать этот день в описателе праздников, в котором хоть свой праздник учреждайте, или 8 марта начинайте праздновать с 23 февраля, по 1 сентября. Код при этом ни сколь не должен изменяться.
Если бы пользователь зашел и вышел, достаточно было просто проверять - есть в описании, значит показали, или уже время закончилось и не показываем. Но он же может войти и шарахаться по страницам не смотря на то, что пора уже пить. А значит должен быть таймер сканирующий описатель праздников на наличие в нем свойства равного текущему времени. А найдя такое свойство, отображает поздравление, после чего уже не сканирует описатель, а трудится над тем когда закрыть поздравление.
Опишите у себя вначале все составляющие своей задачи, определите что и как должно выполняться, напишите код выполняющий, а затем просто добавляйте в объект параметры для него. А то как-то не с той стороны вы заходите.
|
|
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()))
|
|
08.03.2019, 07:58
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Блондинка
|
Не знаю правильно ли это
|
А вы как думаете? Только и остается сказать спасибо, что не каждый день праздник.
Ну я вам о чем рассказывал? Ну ежику же понятно, что ваш код расточителен. Вот так упрощенно (не буду я таймеров запускать и прочего делать), код должен не конкретное в куче условий проверять, а брать для проверки параметры описанные объектом для всех праздников, по одним и тем же правилам.
<!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.
|
|
08.03.2019, 08:37
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
laimas,
Спасибо большое, за поздравления...
|
|
08.03.2019, 09:35
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
P. S. если кто-то в свободное время посещает в игре варвары(barbars) 'таву' и общий чат то должны меня знать под этим же ником...
|
|
26.03.2019, 11:21
|
|
Профессор
|
|
Регистрация: 24.02.2019
Сообщений: 806
|
|
Как правильно указать дату в такой строке
d = new Date(),
если год со знаком минус, ну типа до н. э.
|
|
|
|