Yury Nesterenko ([personal profile] yury_nesterenko) wrote in [community profile] free_comments 2023-06-19 07:19 pm (UTC)

Re: Техническое. Это НЕВОЗМОЖНО! Кто разбирается в JS+CSS? Н

(дебильный местный движок неправильно интерпретирует "@" перед "keyframes", не обращайте внимания)
setTimeout там только для того, чтобы обновлять долготу дня (и соотв. привязанную к ней анимацию) раз в сутки (он у меня, кстати, был прописан с ошибкой - setInterval(setdaylen_(),... вместо setInterval(setdaylen_,..., но дело совсем не в этом) Параметры анимации прописаны в самом верху, в св-вах стиля body (animation-duration при загрузке страницы меняется на 12 часов), и часть из них а именно animation-delay и, самое главное, [personal profile] keyframes day, переопределяется в ф-ции setdaylen, которая вызывается при загрузке и при каждом нажатии на ОК в форме. Анимация идет от полуночи до полудня (затем обратно), соотв. delay(равный кол-ву секунд, прошедших с полуночи) обязан быть отрицательным, чтобы соответствовать текущему времени.
Сейчас удалось установить следующее. Первый вызов ф-ции setdaylen (при загрущке страницы) отрабатывает корректно. Последующие порождают проблему. Хотя, снова повторяю, все передаваемые параметры верны.
Сначала [personal profile] 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';
Но он правильный, и отладочная печать это подтверждает! Абсолютно не понимаю, что происходит :(((

Post a comment in response:

This account has disabled anonymous posting.
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org