Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Удаление линии с Canvas (https://javascript.ru/forum/dom-window/61590-udalenie-linii-s-canvas.html)

vaddd 25.02.2016 00:26

Удаление линии с Canvas
 
Есть <canvas> элемент и задание сделать рисовалку к нему.

Нужны следущие функции:

- Рисование линий, юзер кликает левой кнопокой мышки по координате на канвасе, программа запоминает ее, юзер передвигает мышку и отпускает левую кнопку, программа рисует линию точка А -> точка Б. (это я разобрался)
- Во время рисования, программа должна отображать временную линию, которая бегает за курсором, типа как в пэинте, как только юзер отпускает кнопку, линия становится постоянной.

Я сделал следущее:

3 ивентлистенера к канвасу (mousedown/mousemove/mouseup)

mousedovn listener
делает следущее:
Код:

1) вычисляет координаты начала линии (работает успешно)
2) сохраняет их в глобальную переменную
3) дает значение переменной а true, переменная нужна обработчику события mousemove

mouseup listener
делает следущее:
Код:

1) вычисляет координаты точки где юзер отпустил кнопку мышки
2) рисует линию
3) значение переменной a ставит обратно false

mousemove listener
содержит большое условие (если а = true) то выполняется весь код, если a = false (ранее не было инициированно рисование линии) то не делает ничего
ну и соответственно тоже рисует линию до текущей позиции указателя от начала

Все работает, но линии вспомогательные конечно же не исчезают
если перед отрисовкой в mousemove добавить context.canvas.width = context.canvas.width, то, разумеется, программа работает как и должно в задании, но дает нарисовать только одну линию

Хотелось бы получить совет как исправить ситуацию, не готовый код, а просто совет в каком направлении думать :)

vaddd 25.02.2016 00:43

Перерисовка, получается, тоже отпадает, т.к объектов слишком много для запоминания. И по нагрузке на CPU соответствено перебор.

vaddd 25.02.2016 03:11

проблема решилась созданием двух канвасов, наложенных друг на друга - один для интерфейса (вспомогательная линия), второй - для рисунка


Часовой пояс GMT +3, время: 08:57.