js cnavas отмена предыдущего действаия
здрасвуйте. Вознло два вопроса?
1) Допустим есть онлайн рисовалка, огранизования на яваскриптах. Линии рисуються средствами canvas`a. (document.createElement("canvas"); , moveTo , LineTo). Можно ли какнбудь отменать предудшее действие ( стандарт - ctrl +z ) ? интересует именно как убарть ( удалить ) линию. (Нарисовать сверху предыдущей - такуюже линию цветом фона - не подходит.) 2)Как правильно сделать рисовании линии за крусором регулируемой ширины? пока сделаc с помошью linewidth. но как не красиво получаеться :) больше всего волнует первый вопрос. заранее благодарен |
Цитата:
|
так если например одна линиия была, и через нее провести еше одну ( крест на крест ), и ели сверху вторю просто зарисовттаь цветом фона - то тогда на первой линии все равно останеться отпечаток
|
Канвас умеет экспортировать PNG (метод toDataURL). Сохраняйте это в строку, а потом, при необходимости отмены, накатывайте.
|
hangover,
Что нарисовать, нужно запоминать в процессе рисования. Например, как предложил subzey. |
1)длина стрик модет быть более 10 000 000 символов. если ето хранить на клиенте, скажем 10 действий - ето будет большая нагрузка на клиента...
? 2) как импортировать строку в канвас.? |
А можно примерно так:
У нас есть див с position: relative. Внутри него — канвас с position: absolute. Див ждет события mousedown, после чего по координатам мыши рисует в этой канве что-либо. Далее кнопка отпущена, и при этом создается новый канвас, с position: absolute, поверх старого, и отрисовка производится уже на нем. Таким образом, у нас получается, что каждое действие находится в отдельном слое. Когда количество слоев доходит до, скажем, 20, намый «нижний» из пачки объединяется с «пред-нижним». Для этого используем .drawImage() (пример тут), который может отрисовывать графическое содержимое не только <img>, но и других <canvas>. Копируем содержимое «пред-нижнего» в «нижний», и после этого удалем «пред-нижний». Как теперь делать отмену, думаю, понятно — убираем по очереди слои-канвасы сверху. Вот так, дешево и сердито. :) |
Часовой пояс GMT +3, время: 12:49. |