У меня есть сложная анимационная последовательность, включающая замирания и переходы в JavaScript. Во время этой последовательности, которая состоит из четырех изменяющихся элементов одновременно, setTimeout
используется для каждого элемента.
Протестировано в Internet Explorer 9, анимация работает в режиме реального времени (это должно занять 1,6 секунды, и это заняло ровно 1,6 секунды). ЛЮБОЙ другой браузер будет ужасно тормозить, время анимации составляет 4 секунды (Firefox 3 и 4, Chrome, Opera) и примерно 20 секунд в IE 8 и ниже.
Как IE9 может работать так быстро, когда все остальные браузеры застряли в грязи?
Я пытался найти способы слияния элементов в один, чтобы у одного был один setTimeout в любой момент времени, но, к сожалению, он не выдержал никаких помех (например, щелкнув другую ссылку, чтобы начать новый анимация до завершения текущей).
РЕДАКТИРОВАТЬ: Чтобы уточнить в ответ на комментарии, вот схема кода:
link.onclick = function() {
clearTimeout(colourFadeTimeout);
colourFadeTimeout = setTimeout("colourFade(0);",25);
clearTimeout(arrowScrollTimeout);
arrowScrollTimeout = setTimeout("arrowScroll(0);",25);
clearTimeout(pageFadeOutTimeout);
pageFadeOutTimeout = setTimeout("pageFadeOut(0);",25);
clearTimeout(pageFadeInTimeout);
pageFadeInTimeout = setTimeout("pageFadeIn(0);",25);
}
Каждая из четырех функций выполняет постепенное увеличение на один кадр, затем устанавливает другое время ожидания с увеличенным аргументом до конца анимации.
Вы можете увидеть страницу по адресу http://adamhaskell.net/cw/index.html (Имя пользователя: knockknock; Пароль: goaway) (в нем есть звук и музыка, которые можно отключить, но имейте в виду!) - мой JavaScript очень грязный, так как у меня нет на самом деле не организовал это должным образом, но он прокомментирован немного, так что, надеюсь, вы сможете увидеть, какова общая идея.