Я создаю веб-приложение с использованием холста HTML5 для рисования изображений (например, лакокрасочного полотна), я пытаюсь реализовать функции «отменить» (ctrl + Z) и «повторить», и здесь я сталкиваются с странной проблемой с массивом элементов холста. Иногда, когда я нажимаю Ctrl + Z для отмены, появляется пустое изображение, однако данные находятся в массиве, и я указываю на правильный элемент (потому что, когда я играю с отменой/повтором, мне удается иметь правильные образы справа заказ).Проблема с сохранением данных холста в массиве
Если вы можете посмотреть на следующий код, я был бы признателен, я потратил много времени уже и я не могу найти проблему ... :-(
function Stack(firstImg , size) {
var drawStack = new Array();
var stackIndex = 0;
var stackTop = 0;
var stackFloor = 0;
var stackSize = size;
drawStack[0] = firstImg;
this.add = function() {
drawStack[++stackIndex%stackSize] = cvs.toDataURL("image/png");
if (stackIndex >= stackSize) stackFloor = (stackIndex +1) % stackSize ;
stackTop = stackIndex % stackSize;
}
this.undo = function() {
if (stackIndex%stackSize == stackFloor) return;
clearCanvas();
var tmpImg = new Image();
tmpImg.src = drawStack[--stackIndex%stackSize];
cvsCtx.drawImage(tmpImg, 0, 0);
}
this.redo = function() {
if (stackIndex%stackSize == stackTop) return;
clearCanvas();
var tmpImg = new Image();
tmpImg.src = drawStack[++stackIndex%stackSize];
cvsCtx.drawImage(tmpImg, 0, 0);
}
}
Любое решение или обходное решение, я возьму, большое спасибо!
javascript массивы имеют push, pop и shift. im не уверен, что есть причина делать все модульное деление и индексирование ... – jbabey
всем, кто заинтересован в этом сообщении. Мой код работает, я просто забыл известную функцию img.onload ... которая приводит к заготовкам в моих приложениях – jazzytomato