То же JustLoren: на моей машине работает нормально. Я не уверен, что вы имеете в виду под "деформированием" границы ... может быть, вы говорите о разрыве ? Если так, я боюсь, что вы ничего не можете с этим поделать.
Традиционное решение разрыва состоит в том, чтобы дождаться, пока vsync нарисует ваш следующий кадр, но эта возможность недоступна в JavaScript. Никакая структура не может это исправить. (Фанаты фреймворков: перестаньте предлагать «Использовать my_favourite_framework! Это решает все проблемы!» Для вопросов JavaScript, которые вы не понимаете.)
Как подсказывает mck89, вы, безусловно, можете сделать анимацию более плавной (что также может уменьшить влияние разрыва), рисуя больше кадров, за счет увеличения мощности процессора. Вы также можете предпочесть сохранить переменную для хранения значения x, а не анализировать ее каждый раз из currentStyle. Это будет проще и более широко поддерживается браузерами.
Комментарий ETA: в JS нет конкретного минимального тайм-аута (иногда я могу уменьшить его до 1 мс), но сколько кадров в секунду вы можете получить из анимации, сильно зависит от браузера и мощности машины, именно поэтому, как правило, рекомендуется основывать позицию / кадр на количестве времени, прошедшего с начала анимации (используя новую функцию Date (). getTime ()), а не перемещать / изменять фиксированную величину для каждого кадра.
В любом случае, самым быстрым, что вы можете сделать, является использование интервала 16 мс, что соответствует одному кадру на мониторе с частотой 60 Гц (обычное значение по умолчанию для плоского экрана).