Есть два способа сделать это, которые могут уменьшить мерцание, особенно если у вас много кругов.
Один из них - двойная буферизация, и для краткого вопроса по этому вопросу вы можете посмотреть: Поддерживает ли HTML5 / Canvas двойную буферизацию?
По сути, вы рисуете на двух холстах и меняете их местами по мере необходимости.
Это предпочтительный вариант, особенно для многихизменения в кадре, но, другой способ, который я сделал, это просто нарисуйте круг, который я хочу стереть, используя цвет фона, затем нарисуйте правильным цветом новый круг.
Единственная проблема заключается вчто существует небольшая вероятность того, что вы можете оставить некоторые доказательства попытки удаления, поскольку кажется, что для некоторых фигур трудно заставить их рисовать точно сверху.
ОБНОВЛЕНИЕ:
Исходя из комментария, вы можете посмотреть это обсуждение о двойной буферизации на холсте:
Проблемы с двойной частотой буферизации в холсте HTML
основной идеа, чтобы отслеживать все, что вы нарисовали, с текущей позицией, затем на отдельном холсте, вы перерисовываете все, затем переворачиваете их, а затем я просто перерисовываю снова, на новых позициях, чтобы гарантировать, что изображениевыглядит так, как должно.Поменять их местами - это быстрая операция, единственной проблемой будет, если вы поместите обработчики событий на холст, в этом случае они будут размещены на элементе div или span, окружающем холст, чтобы эта информация не терялась.