Прежде всего, интервальные таймеры не гарантированно работают точно в то время, когда вы их установили, особенно если время очень короткое. Во многих браузерах минимальное значение времени разрешено для setInterval()
. Таким образом, если это минимальное время больше 13 мс или если много интервальных вызовов поступают дольше 13 мс, ваша анимация с фиксированным числом шагов займет больше времени и будет медленнее.
Во-вторых, любая надежная анимация должна использовать алгоритм анимации, в котором она рассчитывает шаги, которые она хочет использовать, а затем при каждом шаге переоценивает (сравнивая системное время с ожидаемым системным временем для этого номера шага). будь то за графиком или с опережением графика, и соответственно корректирует размер будущего шага, чтобы он выполнялся вовремя и, по-видимому, шел с соответствующей скоростью. Это то, что делает анимация в jQuery. Это то, чего не делает ваша setInterval()
анимация.
Вот справочная статья о самонастраивающихся таймерах для анимаций, которые запускаются в предсказуемое время, и другая статья о минимальных временах для таймеров.
Вот статья и код о анимации движения и еще один фрагмент кода , который выполняет анимацию движения.
Также, для простоты, измените это:
document.getElementsByTagName('body')[0]
на это:
document.body