HTML5キャンバスを使用して画像を描画するWebアプリケーションを作成しています(「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);
}
}
任意のソリューションまたは回避策、私がかかりますが、私はUNDO/REDO機能を数回実施していると、私はライセンス上の理由のためのコードを投稿することはできませんが、私はあなたにその必要のあるいくつかの擬似コードを与えることができます
javascript配列には、プッシュ、ポップ、シフトがあります。私はすべてのモジュラ部門とインデックス作成をやっている理由は確かではありません... – jbabey
この投稿に興味のある人なら誰でも。私のコードが動作し、私はただの有名なimg.onload関数を忘れていました...私のアプリケーションでは空白の画像になってしまいました – jazzytomato