Время не гарантируется, чтобы быть точно правильным. Для демонстрации я установил контрольный пример , который показывает, что время немного отличается от отметки в 1 секунду. Что касается второй части вашего вопроса, вы можете использовать событие animationend
, чтобы перезапустить его, или вы также можете настроить его на итерацию (как я делал в моем примере).
Обновление Трудно смоделировать удушение браузера, но я заметил значительное отклонение от анимации, когда она задыхалась естественным образом. Например, после загрузки страницы мой Firebug запустился, что привело к тому, что первая анимация прыгнула с вниз до 0,574 секунды, почти вдвое меньше моего первоначального значения. Таким образом, похоже, что браузер действительно пытается компенсировать немного, но это также может компенсировать также. Я также видел моменты продолжительностью до 2 секунд, поэтому я не думаю, что вы можете сказать, что время будет точным в любом случае.
Обновление 2 Итак, я смог заставить браузер захлебнуться (пришлось считать до 1000000 в FF ... я впечатлен), и быстрый ответ на Ваш вопрос - нет, он не дает никакой компенсации, чтобы попытаться получить точное время. Он просто задыхается и не оживляет. Имейте в виду, что это узкий цикл, поэтому он может работать лучше, если он может использовать другие вычисления, но я точно не знаю.