@Anonymous12344321

Существует ли библиотека для замедленной анимации рисования фигур в Canvas?

К примеру, в canvas мы можем нарисовать линию при помощи функций moveTo и lineTo. Но при этом при вызове stroke данная линия будет нарисована моментально. Есть ли библиотека, которая может сделать так, чтобы эта линия и вообще любая фигура в canvas рисовалась замедленно, по какому-то заданному промежутку времени?
В общем, я пишу программу, которая визуализирует бинарное дерево поиска и хотелось бы, чтобы анимация рисования узлов и ребер к ним была плавной.
P.S я уже пытался написать отдельную функцию, которая рисовала бы линии и окружности по маленьким частям с замедлением. Вот пример для окружности
async function drawAnimaneCircle(x, y)
{
    
     let i = 0;
    
    while(i < (Math.PI * 2))
     {
        await sleep(15);

         context.beginPath();
         context.strokeStyle = "red";
         context.arc(x, y + R, R, -Math.PI / 2, i);

         i += Math.PI / 24;   
         
         context.stroke();


     }
}


Анимация получилась отличная, но проблема в том, что здесь для для реализации sleep пришлось использовать асинхронные функции. Из-за этого мой первоначальный алгоритм полностью перестал работать, поскольку он устроен так, что при создании вершины, которая представляет собой объект, который помимо правого и левого потомка содержит поле data, которое хранит координаты данной вершины для ее отображения на canvas. Так получилось, что из-за асинхронных функций вместо объектов начали возвращаться промисы и в итоге первоначальный алгоритм отказал, исправить крайне проблематично
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
tuychin
@tuychin
Frontend dev
Привет!
Одна из популярных - GSAP
Также, плавность можно реализовать нативными средствами - setInterval или requestAnimationFrame
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 11:53
3000 руб./за проект
22 нояб. 2024, в 11:51
20000 руб./за проект
22 нояб. 2024, в 11:50
200000 руб./за проект