【发布时间】:2014-07-31 04:55:13
【问题描述】:
我对这个 Canvas Element 完全陌生。我可以在画布上画线,但不能只清除特定线。整个画布变为空白。
试过这个: HTML:
<canvas id="cvs" width="400" height="400"></canvas>
<hr />
<input type="submit" id="reDrowA" value="Draw A" />
<input type="submit" id="reDrowB" value="Draw B" />
<hr />
<input type="submit" id="clearA" value="Clear A" />
<input type="submit" id="clearB" value="Clear B" />
脚本
$(document).ready(function(){
canvas = document.getElementById("cvs");
$("#reDrowA").on("click",function(){
a = canvas.getContext('2d');
a.translate(0.5, 0.5);
a.beginPath();
a.setLineDash([2,10]);
a.moveTo(10,10);
a.lineTo(300,10);
a.lineTo(300,300);
a.stroke();
});
$("#reDrowB").on("click",function(){
b = canvas.getContext('2d');
b.translate(0.5, 0.5);
b.beginPath();
b.setLineDash([2,10]);
b.moveTo(10,10);
b.lineTo(10,300);
b.lineTo(300,300);
b.stroke();
});
$("#clearA").on("click",function(){
a.clearRect(0, 0, canvas.width, canvas.height);
});
$("#clearB").on("click",function(){
b.clearRect(0, 0, canvas.width, canvas.height);
});
});
【问题讨论】:
-
据我所知,您无法访问画布中的特定元素,您必须完全清除它。我不知道您的要求是什么,但如果您正在绘制图表之类的内容并想要访问单个项目、响应它的事件等,请查看 svg...
-
你不能那样做。画布是位图。你在上面画的所有东西都留在那里。之后您无法操作特定的图纸。您只能将其作为一个整体清除。如果您希望能够在画布上绘制“对象”并稍后对其进行操作并删除它们,您需要自己(在数组中)跟踪这些对象,然后有一个绘制函数定期更新画布并原始所有数组中的当前对象。要清除特定对象,只需将其从数组中清除并重绘即可。
-
所以要管理两行,我需要创建两个 Canvas 元素吗?
-
如果你想管理多行,你需要使用多个图层(画布)或(正如 HaukurHaf 上面的评论所说)注册你绘制的每一行,然后在你清除所有内容后 - 重新绘制你需要的行。
-
我们无法访问画布中的元素,我们必须清除并重绘所有画布元素。
标签: javascript jquery html canvas