Я ничего не вижу в вашем коде, проверяющем разницу во времени.В большинстве библиотек (jQuery, MooTools и т. Д.) Анимация корректируется в зависимости от времени.
jQuery использует метод step
, который используется для определения следующего значения для эффекта.Чтобы посмотреть на эту функцию, откройте версию jQuery для разработчиков (без сжатия) и найдите jQuery.fx.prototype
.Этот блок кода содержит метод step
.
Допустим, вы хотите указать элементу перемещаться из одной позиции в другую.Похоже, ваш код будет повторяться, пока не будет завершено с фиксированным количеством анимаций.Таким образом, вы строго по количеству итераций, а не по времени.Браузеры часто отстают.Кто-то может запускать на своем компьютере всякие ненужные файлы, что замедлит ваше выполнение.И тогда общее выполнение вашей анимации будет дольше, чем предполагалось, и сама анимация будет «отрывочной».
Итак, вместо этого вы должны быть строгими со временем и не пытаться выполнять даже шаги.Каждый раз, когда вы «шагаете» по анимации, вы должны учитывать время начала анимации, общее время, необходимое для завершения анимации, и сколько времени прошло.При этом вы можете сказать, где анимация должна быть.Поэтому, если вы хотите переместить элемент (линейно) из позиции 100 в 200 за 10 секунд, а у нас есть 7,5 секунды, вы знаете, что позиция должна быть 175. Затем, как только время достигнет или превысит 10 секунд, вы устанавливаетедо 200 и уничтожить цикл.
Код jQuery будет немного трудно прочитать из-за эффектов замедления, которые он использует, и всех внутренних хуков и обратных вызовов.Но идея довольно проста.