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