Общие вопросы по объекту Date

Не могу понять как работает в этом примере https://jsfiddle.net/367d9rv1/2/ get.Minutes
Почему выдает всегда только третий вариант условия if(m <= 20 || m > 10) ?

Потому что в данном случае условие всегда выполнится: кол-во минут равно 20 или меньше (m <= 20) ИЛИ кол-во минут больше 10 (m > 10). То есть в этот диапазон попадают все значения, которые может вернуть функция getMinutes: от 0 до 59.

то есть это надо было все условия через оператор && сделать…
спасибо…

В данном случае - да.

Однако здесь есть еще одна штука. Дело в том, что фон у элемента с идентификатором “fon” в результате выполнения кода будет или зеленым, или желтым, так как оператор else относится к последнему if’у (иными словами: если кол-во минут входит в диапазон от 10 до 20 включительно - зеленый цвет, иначе - желтый). Насколько я понял это не совсем соответствует задумке.

не совсем понятно о чем речь… я протестировала, например на секундах здесь https://jsfiddle.net/367d9rv1/4/ - используются все 4 варианта цвета в зависимости от прошедшего времени

“иными словами: если кол-во минут входит в диапазон от 10 до 20 включительно - зеленый цвет, иначе - желтый” - так и должно быть, каждому диапазону времени - свой цвет. Желтому остается диапазон от 0 до 9 (то что не вошло в остальные условия). Или что-то не так здесь?

Здесь все так :) Речь шла о коде, который был по ссылке в первом посте (https://jsfiddle.net/367d9rv1/2/).

Я бы рекомендовал использовать классы вместо инлайновых стилей. И вынести повторяющийся код в функцию. Примерно так https://jsfiddle.net/kontrach/367d9rv1/6/

2 лайка

Как должен работать массив данных с getSeconds?
Например, здесь https://jsfiddle.net/367d9rv1/10/ - данные (цвета) из массива должны соответствовать каждой временной единице по очереди (то есть каждой секунде присваивается свой цвет).
В итоге должно работать как здесь https://jsfiddle.net/367d9rv1/9/
Как привязать переменную от getSeconds к итерациям массива?

Примерно так https://jsfiddle.net/367d9rv1/11/

1 лайк

Подскажите, пожалуйста, как правильно должен работать скрипт с использованием get.Seconds и get.Months одновременно?
В скрипте: Функция с getSeconds меняет фон страницы (цвет) каждой секунды, а функция с get.Months меняет фон (изображение) в зависимости от времени года. При этом эти 2 фона должны накладываться один на другой (по принципу работы стилей css: background: #ccc; background-image: url("xxx); - эффект как здесь должен быть https://jsfiddle.net/sdyz7dtt/), только с использованием JS для изменения этих бэкграундов.
То что есть сейчас - https://jsfiddle.net/5qtk922t/2/ - эти два фона мигают. Или в JS нельзя запускать 2 setInterval одновременно? А если поместить все эти условия в одну функцию - то не работает вообще.

Код не работает как ожидается потому что оба интервала устанавливают значение одного и того же css свойства style.background.

Еще ошибки: запускать интервал для установки цвета фона не имеет значения.
Не надо делать интервал с 0, функция будет запускаться слишком часто (до 60 раз в секунду).

Итого: https://jsfiddle.net/5qtk922t/3/

1 лайк

Спасибо…

[quote=“dmitry, post:11, topic:1268”]
запускать интервал для установки цвета фона не имеет значения.
[/quote] - вторая функция у тебя работает и без интервала. Почему тогда первая не работает так? - если убрать интервал и вызвать только саму функцию
startTime();

Собственно, этот интервал и не нужен, мне надо только запускать эти 2 функции, и без setInterval не запускались эти функции одновременно (нашла способ через setInterval, возможно это и неверный подход был)

И еще - если добавить точку с запятой в твоем примере после вызова startMon() - то тогда не работает первая функция (startTime). Почему так?

Если сделать так, как ты описываешь, я не вижу никакой проблемы. Покажи код, который приводит к ошибке, и опиши что ты ожидаешь увидеть и что происходит.

извини, с “;” код работает…
в общем, не работает только со startTime(); - вызов самой только функции без setInterval (тогда цвет фона не выводится) - здесь пример https://jsfiddle.net/5qtk922t/6/
А для второй функции startMon(); - всё работает без setInterval

Эта проблема все еще актуальна в твоем примере https://jsfiddle.net/5qtk922t/6/, потому что изображение, устанавливаемое фоном меняло значение свойства “background”, которое является сокращенной записью для свойство “backgroundImage” и “backgroundColor” и других.

Поправленный вариант:

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

1 лайк

спасибо за объяснения…

имеешь ввиду .style.backgroundImage использовать одной строкой в коде? Если да - то не представляю как это возможно в случае с разными условиями

Принимай отдельно решение о том какое фоновое изображение вставлять, и отдельно куда и как его вставлять. Это два независимых действия, и удобнее работать с кодом когда эти действия происходят последовательно.

function startMon() {
    var backgrounds = ['http://img-fotki.yandex.ru/get/6606/52732579.144/0_a7c72_eabe0382_XL.jpg',
        'http://img-fotki.yandex.ru/get/6203/52732579.c4/0_97b22_6c5429f5_L.jpg',
        'http://mnogoblog.ru/wp-content/uploads/2012/07/animazy.gif',
        'http://demiart.ru/forum/image.php?i=forum/uploads/post-33144-1188373736.gif',
        'http://img-fotki.yandex.ru/get/6606/52732579.144/0_a7c72_eabe0382_XL.jpg'];
    var date = new Date();
    var mo = date.getMonth();
    var backgroundForContainer
    if (mo >= 0 && mo < 2) {
        backgroundForContainer = backgrounds[0];
    } else if (mo >= 2 && mo < 5) {
        backgroundForContainer = backgrounds[1];
    } else if (mo >= 5 && mo < 8) {
        backgroundForContainer = backgrounds[2];
    } else if (mo >= 8 && mo < 11) {
        backgroundForContainer = backgrounds[3];
    } else {
        backgroundForContainer = backgrounds[4];
    }
    var container = document.getElementById("fon");
    container.style.backgroundImage = 'url(' + backgroundForContainer + ')';
}
1 лайк