Я тестирую вещи прямо сейчас (только началось с веб-разработки несколько дней назад), поэтому я просто скопировал и вставил функцию отмены из http://www.codicode.com/art/undo_and_redo_to_the_html5_canvas.aspx. Прямо сейчас я не могу получить доступ к полному исходному коду, поэтому я просто догадываюсь, где разместить вещи.Пытается создать функцию отмены, вызванную нажатием кнопки на холсте.
Вот фрагмент кода, который я думаю, что имеет отношение к вопросу:
var cPushArray = new Array();
var cStep = -1;
var ctx = document.getElementById('canvas').getContext("2d");
function cPush() {
cStep++;
if (cStep < cPushArray.length) {
cPushArray.length = cStep;
}
cPushArray.push(document.getElementById('canvas').toDataURL());
}
function cUndo() {
if (cStep > 0) {
cStep--;
var canvasPic = new Image();
canvasPic.src = cPushArray[cStep];
canvasPic.onload = function() {
ctx.drawImage(canvasPic, 0, 0);
}
}
}
//This draws the dots on the face.
function drawCoordinates(x, y) {
var pointSize = 3; // Change according to the size of the point.
var ctx = document.getElementById("canvas").getContext("2d");
ctx.fillStyle = "#ff2626";
ctx.beginPath(); //Start path
ctx.arc(x, y, pointSize, 0, Math.PI * 2, true); // Draw a point using the arc function of the canvas with a point structure.
ctx.fill(); // Close the path and fill.
cPush();
}
//count variable keeps track of the flicks
var count = 1;
//this listens for button clicks and displays the elements
document.getElementById('button').onclick = function() {
document.getElementById(count).style.display = "block";
count++;
}
document.getElementById('buttonUndo').onclick = function() {
cUndo();
}
До сих пор я знаю, за то, что кнопка отмены правильно связаны, потому что когда я код alert("hello")
, предупреждение Pops когда кнопка нажата. Однако функция отмены ничего не делает в коде, и мне трудно понять, почему она ведет себя так и как ее исправить.
'cUndo' только отменить то, что было сделано, когда' cPush' называли. Убедитесь, что вы вызываете 'cPush' после изменения холста. –
в вашей 'cUndo()' функции, которая проверяет 'if (cStep> 0)', поэтому все внутри этого блока будет работать, только если cStep больше 0. –
@MikeC Это имеет смысл! Я только что изменил код, так что cPush вызывается после drawCoordinates, но все равно ничего не происходит. – somanyerrorswhy