(дебильный местный движок неправильно интерпретирует "@" перед "keyframes", не обращайте внимания) setTimeout там только для того, чтобы обновлять долготу дня (и соотв. привязанную к ней анимацию) раз в сутки (он у меня, кстати, был прописан с ошибкой - setInterval(setdaylen_(),... вместо setInterval(setdaylen_,..., но дело совсем не в этом) Параметры анимации прописаны в самом верху, в св-вах стиля body (animation-duration при загрузке страницы меняется на 12 часов), и часть из них а именно animation-delay и, самое главное, keyframes day, переопределяется в ф-ции setdaylen, которая вызывается при загрузке и при каждом нажатии на ОК в форме. Анимация идет от полуночи до полудня (затем обратно), соотв. delay(равный кол-ву секунд, прошедших с полуночи) обязан быть отрицательным, чтобы соответствовать текущему времени. Сейчас удалось установить следующее. Первый вызов ф-ции setdaylen (при загрущке страницы) отрабатывает корректно. Последующие порождают проблему. Хотя, снова повторяю, все передаваемые параметры верны. Сначала keyframes day менялся на новый так: if(toReplace!=-1) { //-1 ставится при загрузке страницы var element = document.getElementsByTagName('head')[0]; if(toReplace!=-1) { element.replaceChild(astyle, element.childNodes[toReplace]); } else { element.appendChild(astyle); toReplace = element.childNodes.length-1; } Казалось, что проблему создает именно replaceChild, после чего анимация начинала хрен знает почему идти быстрее. Заменил на var element = document.getElementsByTagName('head')[0]; if(toReplace!=-1) { element.removeChild(element.childNodes[toReplace]); } element.appendChild(astyle); toReplace = element.childNodes.length-1; Теперь анимация идет с правильной скоростью, но если нажать ОК не сразу после загрузки, а несколко часов спустя - фаза резко сбивается, как будто передан неправильный delay (больший, чем надо - т.е. вермя прыгает вперед!) в строке document.body.style.animationDelay=-(curdate.getSeconds()+(curdate.getMinutes()-timeshift)*60+(curdate.getHours()+24)*3600)+'s'; Но он правильный, и отладочная печать это подтверждает! Абсолютно не понимаю, что происходит :(((
Re: Техническое. Это НЕВОЗМОЖНО! Кто разбирается в JS+CSS? Н
setTimeout там только для того, чтобы обновлять долготу дня (и соотв. привязанную к ней анимацию) раз в сутки (он у меня, кстати, был прописан с ошибкой - setInterval(setdaylen_(),... вместо setInterval(setdaylen_,..., но дело совсем не в этом) Параметры анимации прописаны в самом верху, в св-вах стиля body (animation-duration при загрузке страницы меняется на 12 часов), и часть из них а именно animation-delay и, самое главное,
Сейчас удалось установить следующее. Первый вызов ф-ции setdaylen (при загрущке страницы) отрабатывает корректно. Последующие порождают проблему. Хотя, снова повторяю, все передаваемые параметры верны.
Сначала
if(toReplace!=-1) { //-1 ставится при загрузке страницы
var element = document.getElementsByTagName('head')[0];
if(toReplace!=-1) {
element.replaceChild(astyle, element.childNodes[toReplace]);
}
else {
element.appendChild(astyle);
toReplace = element.childNodes.length-1;
}
Казалось, что проблему создает именно replaceChild, после чего анимация начинала хрен знает почему идти быстрее. Заменил на
var element = document.getElementsByTagName('head')[0];
if(toReplace!=-1) {
element.removeChild(element.childNodes[toReplace]);
}
element.appendChild(astyle);
toReplace = element.childNodes.length-1;
Теперь анимация идет с правильной скоростью, но если нажать ОК не сразу после загрузки, а несколко часов спустя - фаза резко сбивается, как будто передан неправильный delay (больший, чем надо - т.е. вермя прыгает вперед!) в строке
document.body.style.animationDelay=-(curdate.getSeconds()+(curdate.getMinutes()-timeshift)*60+(curdate.getHours()+24)*3600)+'s';
Но он правильный, и отладочная печать это подтверждает! Абсолютно не понимаю, что происходит :(((