【发布时间】:2013-05-13 08:49:36
【问题描述】:
我正在开发一个使用鼠标点击来绘制的画布绘画应用程序。很简单。 mouseup 上有一个监听器,它保存当前绘图相对于 getImageData 并设置用户实际绘制的会话 cookie。片段:
var canvasData;
function save () {
// get the data
canvasData = context.getImageData(0, 0, canvas.width, canvas.height);
};
...
this.mouseup = function (ev) {
if (tool.started) {
tool.mousemove(ev);
tool.started = false;
save();
document.cookie = 'redraw=true; path=/'
}
};
我正在寻找的功能是让用户能够离开页面,然后返回页面,不缓存,让网站看到他们的 cookie,读取绘图并使用 putImageData 映射它。片段:
function restore () {
// restore the old canvas
context.putImageData(canvasData, 0, 0);
};
var checking = readCookie('redraw')
if (checking) {
restore();
};
但是当我尝试这样做时,我在 putImageData 行上收到错误控制台显示“图像损坏或截断”和“TypeError:值不是对象”。
当我尝试将画布保存到内存时(保存到数据,绘制图像):
var savedData = new Image();
function save () {
savedData.src = canvas.toDataURL("image/png");
};
function restore () {
context.drawImage(savedData,0,0);
};
我收到“NS_ERROR_NOT_AVAILABLE:组件不可用”和“访问属性 'toString' 的权限被拒绝”。有人知道我在做什么错吗?我会把它放在 jsfiddle 上,但在这种情况下,它不会那么有效,所以 here's the full。谢谢。
【问题讨论】:
-
你在哪里保存画布数据到cookie?根据问题中的代码,您所做的就是保存值
redraw=true。 -
我没有将画布数据保存到 cookie。 cookie 只是用来确定页面是否会加载画布数据。画布数据被保存为 getImageData/putImageData 和 var canvasData 的一部分。
-
但是您将
canvasData变量保存在哪里?您确实意识到重新加载页面时脚本状态被清除并且所有旧变量值都丢失了? -
我没有。我假设这两种方法都是持久的。您是说我应该将 canvasData var 作为 cookie 传递,并将其用作存储并确定用户是否在页面上?
-
如果 JS 变量是持久的,那么根本不需要 cookie :) 无论如何,我怀疑它的信息太多而无法放入 cookie;我会调查localStorageinsted。
标签: javascript html html5-canvas