Лучше вместо
setInterval()
использовать
requestAnimationFrame()
Там принцип: отрисовали кадр – запросили отрисовку следующего. Пошаговая передача эстафеты.
Завести переменную-флаг, которая будет
true
или
false
. Разрешать или запрещать анимацию.
На каждом шаге смотреть на эту переменную: и делать следующий
requestAnimationFrame()
только если переменная
true
.
Кнопка будет менять состояние этой переменной. И, при переключении из
false
в
true
, запускать отрисовку.
Ещё оптимизация: не нужно в каждом кадре искать элементы, достаточно это сделать один раз.