2012-06-22 2 views
0

вот моя страница http://www.dev.1over0.com/canvas/canvas_web.htmlпытается отлаживать отменить функциональность программы холст краски

У меня возникли проблемы с функциональностью отмен - Я думаю, что я близко, но вот вопрос

Сначала я» расскажет вам основу приложения для рисования - я отводки четыре полотна http://www.dev.1over0.com/canvas/js/canvas_web.js , если вы посмотрите на JS файл, который вы увидите в верхнем всех моих комментариях о том, что я делаю с полотнами

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

в конце MouseUp событие вызывает эту функцию

function img_update() { 
contexto.drawImage(canvas, 0, 0); 
saveActions(); 
context.clearRect(0, 0, canvas.width, canvas.height); 
} 

Здесь изображение, которое на временный холст заканчивается втягивается на ImageView холсте так, по существу, холст imageTemp стирается каждый раз

так что для функциональности отмен I первый объявить пустой массив

var undoHistory = []; 

Я также объявить новый образ

var undoImg = new Image(); 

когда img_update вызывается - он вызывает другую функцию saveActions

function saveActions() { 
var imgData = canvaso.toDataURL("image/png"); 
undoHistory.push(imgData); 
$('#undo_canvas button').removeAttr('disabled'); 
} 

В этой функции - Я, по существу сохраняя недавно нарисовали изображение canvas в массив undoHistory Кажется, что он работает нормально (я считаю) Итак, после каждого постоянного просмотра Полотно обновлено сохраняет это состояние в массив

Теперь, если вы заметили, когда вы рисуете изображение, и это сохранить в ImageView холст кнопка отмены становится включенными

Так что, если вы нажмете на кнопку отмены, она вызывает эту функцию

function undoDraw() { 
if(undoHistory.length > 0){ 
$(undoImg).load(function(){ 
contexto.drawImage(undoImg, 0,0); 
}); 
undoImg.src = undoHistory.pop(); 
if(undoHistory.length == 0) { 
$('#undo_canvas button').attr('disabled','disabled'); 
} 
} 
}        

Вот что я пытаюсь сделать, это взять предыдущее состояние изображения и нарисуйте его на холсте он работает таким образом, что это влияет на Z-индекс изображений, но не избавившись от изображений И вам нужно дважды щелкнуть по нему, что смущает меня

Итак, если вы можете попытаться вытянуть три прямоугольника друг на друга Вы можете нажать кнопку отмены, и это будет влиять на z-index - щелкните по нему три раза, вы увидите, что я имею в виду, поэтому это своего рода работа , может быть; - {

+0

Привет, очень интересный вопрос, но, к сожалению, я не могу получить доступ к ссылкам. С тех пор, как вы задали вопрос, веб-сайт все еще работает? – Myna

ответ

1

Перед тем, как нарисовать последнее изображение, вы должны очистить холст, иначе он нарисует изображение на предыдущем холсте; Также вы вытаскиваете последнее изображение, которое вы только что нажали (вот почему вам нужно дважды щелкнуть).Поэтому попробуйте что-то вроде этого (вам, возможно, придется адаптировать код, я не уверен, что он работает из коробки)

function undoDraw(){ 
    if(undoHistory.length > 0){ 
     $(undoImg).load(function(){ 
      contexto.clearRect(0,0, canvas.width, canvas.height);  
      contexto.drawImage(undoImg, 0,0); 
    }); 
    undoHistory.pop(); 
    undoImg.src = undoHistory.pop(); 
    if(undoHistory.length == 0) { 
    $('#undo_canvas button').attr('disabled','disabled'); 
     } 
    }     
} 
+0

спасибо Томасу - ваш ответ был очень полезен - он работает намного лучше. Я помещаю эту строку кода перед загрузкой funciton contexto.clearRect (0,0, canvas.width, canvas.height); и последнее отключение, похоже, работает - я хотел бы иметь возможность продолжать удалять кнопку отмены, как историю отмены, но это займет немного больше работы, я думаю, но последняя функциональность отмены теперь работает - если вы проверьте ссылку еще раз, вы узнаете, что я имею в виду. Еще раз спасибо –

+0

Я работал над чем-то очень похожим, вы можете проверить эту тему http://stackoverflow.com/questions/9875123/issue-with-saving-canvas-data-to-an -array – jazzytomato

Смежные вопросы