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