У меня есть код, который рисует линии с каждым нажатием на холсте. Показывает строку с движением мыши, заканчивает эту строку и начинает новую с той же позиции, когда мышь: вниз.4
Я разбил два примера кода вместе, чтобы сгенерировать этот код. Один из примеров позволяет мне просто рисовать линии, пока я удерживаю мышь, и это формирует основные функции приложения. Странная часть в том, что с исходным примером кода не имеет значения, сколько строк у меня на холсте, новые линии всегда плавно перемещаются на mouse:move
. Когда я добавил функцию отсутствия необходимости удерживать мышь при рисовании, по какой-то причине после добавления дополнительных линий на холст подвижная линия очень медленно реагирует на мышь. Вы можете увидеть, что я имею в виду ниже. Первый холст с красными линиями - это оригинальный пример кода. Второй - мой твик с кучей строк. Третий - опять мой твик, я просто обновил страницу и избавился от всех строк. Вы можете видеть, как быстро реагирует линия, только на экране несколько строк.
![enter image description here](https://i.stack.imgur.com/Ifi1L.gif)
Код mouse:move
практически идентичен в обоих случаях, поэтому я не могу понять, почему мой трюк настолько мучительно медленный после добавления около 50 объектов.
Красная линия, заметьте, как реагирует новая строка, когда мышь движется .: https://codepen.io/morrowsend/pen/YgBxvj?editors=0010
Моя тонкая скрипка, обратите внимание, что самая новая строка задерживается в реакции на движения мыши. Это связано с мышью: перемещайте, имея в нем canvas.renderAll (). Чем больше строк на холсте, тем менее он реактивен: https://codepen.io/morrowsend/pen/EMeWpM
Теперь вы можете сказать "Просто используйте анимацию", я попробовал это. Я еще не совсем понял, но я попробовал это, используя анимацию Fabric, которая мне не очень понравилась. Самый быстрый способ - 1 мс, но на самом деле он не очень реактивный, и он дает мне артефакты после прорисовки нескольких линий, иногда новая линия смещается от мыши. Кроме того, он помещает анимацию предыдущей строки так, что она перемещает конечную точку на самую новую строку. Это поведение легче увидеть. На изображении ниже у меня уже есть много строк в коде анимации, и вы можете видеть, что он ведет себя плохо. Когда я обновляю и начинаю с чистого холста, сначала все работает нормально, но чем больше строк я получаю, тем более неправильным становится результат: ![enter image description here](https://i.stack.imgur.com/2ykIH.gif)
Вот мой код animate, использующий встроенную в Fabric анимацию. https://codepen.io/morrowsend/pen/YgBxvj?editors=0010
Я нашел пример использования animate с canvas, но я бы хотел, чтобы мои линии редактировались пользователем после того, как они были нарисованы (пока еще не реализованы). Это выглядит гладко, однако на холсте пока нет объектов-человечков, поэтому он может затормозить так же, как мой, если добавить еще:
html холст линия, следующая за мышью
релевантная скрипка: http://jsfiddle.net/dFjodorov/XQpzU/5171/
Как можно плавно анимировать рисование линии, даже если на экране несколько сотен объектов? Я чувствую, что перепробовал много вещей безрезультатно.