Я создаю приложение, которое делает указанное пользователем количество вызовов canvas.putImageData
в Javascript. Между каждым вызовом putImageData
данные изображения изменяются. Время, необходимое для изменения данных, зависит от вызова. Пользователь также должен иметь возможность остановить анимацию во время ее выполнения (я использую кнопку). Изначально я использовал:
for (var i=0; i < n; i++) {
canvas.putImageData(imgdata, 0, 0);
modify(imgdata);
}
Однако это не отображает каждый кадр, а только последний. Что работает, так это поставить предупреждение после canvas.putImageData
, но это очень раздражает. Я пытался использовать setInterval
и cancelInterval
, как, я уверен, многие бы предложили, но это не работает для меня по двум причинам:
- Время, необходимое для изменения данных изображения, варьируется.
- setInterval является асинхронным; если задержка, которую я использую, слишком короткая, вызовы для модификации (imgdata) накапливаются в стеке, и пользователи не смогут остановить анимацию, когда захотят.
Как я могу заставить это работать правильно?