Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.03.2010, 16:59
Аспирант
Отправить личное сообщение для hangover Посмотреть профиль Найти все сообщения от hangover
 
Регистрация: 08.10.2009
Сообщений: 53

js cnavas отмена предыдущего действаия
здрасвуйте. Вознло два вопроса?
1) Допустим есть онлайн рисовалка, огранизования на яваскриптах.
Линии рисуються средствами canvas`a. (document.createElement("canvas"); , moveTo , LineTo). Можно ли какнбудь отменать предудшее действие ( стандарт - ctrl +z ) ? интересует именно как убарть ( удалить ) линию. (Нарисовать сверху предыдущей - такуюже линию цветом фона - не подходит.)

2)Как правильно сделать рисовании линии за крусором регулируемой ширины?
пока сделаc с помошью linewidth. но как не красиво получаеться


больше всего волнует первый вопрос.
заранее благодарен
Ответить с цитированием
  #2 (permalink)  
Старый 14.03.2010, 18:31
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от hangover
Нарисовать сверху предыдущей - такуюже линию цветом фона - не подходит.
Что-то поверх придётся нарисовать. Что -- нужно запоминать в процессе рисования.
Ответить с цитированием
  #3 (permalink)  
Старый 15.03.2010, 09:05
Аспирант
Отправить личное сообщение для hangover Посмотреть профиль Найти все сообщения от hangover
 
Регистрация: 08.10.2009
Сообщений: 53

так если например одна линиия была, и через нее провести еше одну ( крест на крест ), и ели сверху вторю просто зарисовттаь цветом фона - то тогда на первой линии все равно останеться отпечаток
Ответить с цитированием
  #4 (permalink)  
Старый 15.03.2010, 09:44
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Канвас умеет экспортировать PNG (метод toDataURL). Сохраняйте это в строку, а потом, при необходимости отмены, накатывайте.
Ответить с цитированием
  #5 (permalink)  
Старый 15.03.2010, 11:54
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

hangover,
Что нарисовать, нужно запоминать в процессе рисования. Например, как предложил subzey.
Ответить с цитированием
  #6 (permalink)  
Старый 23.03.2010, 03:41
Аспирант
Отправить личное сообщение для hangover Посмотреть профиль Найти все сообщения от hangover
 
Регистрация: 08.10.2009
Сообщений: 53

1)длина стрик модет быть более 10 000 000 символов. если ето хранить на клиенте, скажем 10 действий - ето будет большая нагрузка на клиента...
?
2) как импортировать строку в канвас.?
Ответить с цитированием
  #7 (permalink)  
Старый 23.03.2010, 10:56
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

А можно примерно так:

У нас есть див с position: relative. Внутри него — канвас с position: absolute. Див ждет события mousedown, после чего по координатам мыши рисует в этой канве что-либо.

Далее кнопка отпущена, и при этом создается новый канвас, с position: absolute, поверх старого, и отрисовка производится уже на нем. Таким образом, у нас получается, что каждое действие находится в отдельном слое.

Когда количество слоев доходит до, скажем, 20, намый «нижний» из пачки объединяется с «пред-нижним». Для этого используем .drawImage() (пример тут), который может отрисовывать графическое содержимое не только <img>, но и других <canvas>. Копируем содержимое «пред-нижнего» в «нижний», и после этого удалем «пред-нижний».

Как теперь делать отмену, думаю, понятно — убираем по очереди слои-канвасы сверху.

Вот так, дешево и сердито.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск