答案 0 :(得分:1)
你的小提琴正在工作,我唯一想到的是调整画布的尺寸确实可以清除它,所以在提供的小提琴中,你实际上在鼠标的每一个动作中都清楚它。
编辑:好的,我想我理解你的问题。
1)在调整大小时,您将丢失内容 2)在调整松开当前路径的大小时,必须重新启动路径绘图 3)如果你在每次鼠标移动时创建一个画布,内存消耗将达到山脉,你的应用程序将不会被动反应 4)因为重新绘制发生在鼠标移动而不是requestAnimationFrame上,如果你只是在鼠标移动时进行完全重绘,整个事情看起来会很糟糕。
所以我更新了这个小提琴,以便解决所有这些问题:
在此处尝试:http://jsfiddle.net/gamealchemist/JHr2P/78/
存储/恢复代码:
var _storeCanvas = document.createElement('canvas');
var _storeCtx = _storeCanvas.getContext('2d');
function storeInTempCanvas() {
if (_storeCanvas == null || _storeCanvas.width < canvas.width || _storeCanvas.height ) {
_storeCanvas.width = 2 * canvas.width;
_storeCanvas.height = 2 * canvas.height;
}
_storeCtx.drawImage(canvas, 0, 0);
}
function restorefromTempCanvas() {
ctx.drawImage(_storeCanvas, 0, 0);
}
更新了鼠标移动代码:
var draw = {
// ... same mousedwon code...
mousemove: function(coordinates) {
if (this.isDrawing) {
requestAnimationFrame ( function() {
ctx.lineTo(coordinates.x, coordinates.y);
ctx.stroke();
storeInTempCanvas();
canvas.width+=1;
restorefromTempCanvas();
ctx.beginPath();
ctx.moveTo(coordinates.x, coordinates.y);
} );
}
},
//... same mouseup code.
}