Выполнение плавной анимации на системах с различными возможностями (процессор, мощность графики, другие вещи, происходящие на компьютере) — нетривиальная задача. Надлежащая реализация включает в себя разработку эффективного алгоритма «твининга», который может адаптивно определять (по мере выполнения анимации), какие приращения следует использовать в анимации, чтобы не отставать от графика и быть как можно более плавным.
Лучший способ сделать это — встать на плечи других и использовать то, что было изобретено ранее. В наше время я бы никогда не попытался написать это сам с нуля. Его можно использовать в переходах/анимациях CSS3, но они еще не везде поддерживаются. Его можно использовать или анализировать в jQuery и YUI3. Мой первый выбор — использовать один из фреймворков с богатым набором возможностей. Вам не нужно использовать фреймворк ни для чего другого, вы можете просто использовать его для анимации, если хотите. YUI3 даже позволит вам создать библиотеку с наименьшим количеством кода именно для того, что вы хотите. jQuery не очень большой для начала.
Если вы все еще категорически против использования одной из библиотек, скачайте исходный код соответствующих модулей для каждой библиотеки и изучите, как они это делают. Создайте образец приложения в каждом из них и пошагово изучите, как оно работает, устанавливая контрольные точки в интересных местах. Это будет лучший учитель, который покажет вам, как создать эффективный алгоритм анимации, который может адаптироваться к скоростным возможностям главного компьютера.
Чтобы дать вам представление о том, как работает алгоритм твининга для прямой анимации (с линейным замедлением), вы делаете начальный расчет того, каким должно быть значение шага вашей анимации для времени, в течение которого вы хотите, чтобы анимация выполнялась. Вероятно, это всего лишь предположение о том, что может поддерживать система. Вы делите количество создаваемых шагов на время выполнения анимации и устанавливаете таймер на это время, чтобы знать, когда запустить следующий шаг. Затем вы запускаете один или два шага анимации и видите, сколько времени на самом деле прошло. Если компьютер не поспевает за вашим значением шага, вы будете отставать от графика, и вам придется приспосабливаться и выбирать больший шаг.
Теперь, если вы хотите сделать что-то другое, кроме линейного замедления, очевидно, что это еще не все.
Firefox и Chrome также внедрили несколько новых экспериментальных API, помогающих с плавной анимацией. Я обнаружил это сам, просматривая исходный код jQuery, потому что он использует его, когда он доступен. В Chrome он называется webkitRequestAnimationFrame, и вы можете прочитать о нем здесь, в записи блога Firefox. .
person
jfriend00
schedule
17.09.2011
:)
- person Šime Vidas   schedule 17.09.2011