无法擦除画布上绘制的线条
Unable to erase the lines drawn on canvas
在互联网的大量帮助下,我现在可以通过在画布上拖动鼠标在画布上绘制圆圈和箭头线。现在的问题是我无法擦除我画的东西。我需要一个擦除工具来擦除一小部分的图纸。
我正在画的是我创作了两幅油画。我将在第一个画布(临时画布)上绘制,并将其复制到第二个画布(主画布 临时画布重叠在主画布上。因此,我使用临时画布跟踪鼠标事件。然后我在主画布上使用 请告诉我我在这里犯的错误。提前谢谢。 这是我的代码(JS、CSS、HTML):.clearRect()
。var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var color = 'red';
var tool = 1;
var select = document.forms[0].disease;
select.onchange = function() {
var disease = select.options[select.selectedIndex].text;
if (disease == "Exudates") color = 'red';
else color = 'green';
context.strokeStyle = color;
};
var select2 = document.forms[0].tool;
select2.onchange = function() {
tool = select2.options[select2.selectedIndex].value;
context.lineWidth = tool;
};
function draw(mode) {
var tempcontext = tempcanvas.getContext('2d'),
w = canvas.width,
h = canvas.height,
x1,
y1,
isDown = false;
tempcanvas.onmousedown = function(e) {
var pos = getPosition(e, canvas);
x1 = pos.x;
y1 = pos.y;
isDown = true;
};
tempcanvas.onmouseup = function() {
isDown = false;
context.drawImage(tempcanvas, 0, 0);
tempcontext.clearRect(0, 0, w, h);
};
tempcanvas.onmousemove = function(e) {
if (!isDown) return;
var pos = getPosition(e, canvas);
x2 = pos.x;
y2 = pos.y;
tempcontext.clearRect(0, 0, w, h);
if (mode == "Circles") drawEllipse(x1, y1, x2, y2);
if (mode == "Lines") drawArrow(x1, y1, x2, y2);
};
function drawEllipse(x1, y1, x2, y2) {
var radiusX = (x2 - x1) * 0.5,
radiusY = (y2 - y1) * 0.5,
centerX = x1 + radiusX,
centerY = y1 + radiusY,
step = 0.01,
a = step,
pi2 = Math.PI * 2 - step;
tempcontext.beginPath();
tempcontext.moveTo(centerX + radiusX * Math.cos(0),
centerY + radiusY * Math.sin(0));
for (; a<pi2; a+=step) {
tempcontext.lineTo(centerX + radiusX * Math.cos(a),
centerY + radiusY * Math.sin(a));
}
//tempcontext.fillStyle=color;
tempcontext.font = "20px Georgia";
if (color == "red") tempcontext.fillText("Exudate", x2, y2);
else tempcontext.fillText("Red Lession", x2, y2);
tempcontext.closePath();
tempcontext.lineWidth = tool;
tempcontext.strokeStyle = color;
tempcontext.stroke();
};
function drawArrow(x1, y1, x2, y2) {
var headLength = 10,
step = 0.01,
a = step,
pi2 = Math.PI * 2 - step;
tempcontext.beginPath();
tempcontext.moveTo(x1, y1);
for (; a<pi2; a+=step) {
tempcontext.lineTo(x2, y2);
var degreesInRadians225 = 225 * Math.PI / 180;
var degreesInRadians135 = 135 * Math.PI / 180;
var dx = x2 - x1;
var dy = y2 - y1;
var angle = Math.atan2(dy, dx);
var x225 = x2 + headLength * Math.cos(angle + degreesInRadians225);
var y225 = y2 + headLength * Math.sin(angle + degreesInRadians225);
var x135 = x2 + headLength * Math.cos(angle + degreesInRadians135);
var y135 = y2 + headLength * Math.sin(angle + degreesInRadians135);
// draw partial arrowhead at 225 degrees
tempcontext.moveTo(x2, y2);
tempcontext.lineTo(x225, y225);
// draw partial arrowhead at 135 degrees
tempcontext.moveTo(x2, y2);
tempcontext.lineTo(x135, y135);
}
tempcontext.closePath();
tempcontext.lineWidth = tool;
tempcontext.strokeStyle = color;
tempcontext.stroke();
};
}
function erase() {
tempcanvas.onmousedown = function(e) {
var pos = getPosition(e, canvas);
mousedown = true;
context.beginPath();
context.moveTo(pos.x, pos.y);
};
tempcanvas.onmouseup = function(e) {
mousedown = false;
};
tempcanvas.onmousemove = function(e) {
if (!mousedown) return;
context.clearRect(pos.x, pos.y, 10, 10);
};
}
function getPosition(e, gCanvasElement) {
var x;
var y;
x = e.pageX;
y = e.pageY;
x -= gCanvasElement.offsetLeft;
y -= gCanvasElement.offsetTop;
return {x:x, y:y};
}
function save() {
var canvas2 = document.getElementById('canvas2');
var context2 = canvas2.getContext('2d');
var img = document.getElementById("result");
context2.drawImage(img, 0, 0, 300, 300);
context2.drawImage(canvas, 0, 0);
var canvasData = canvas2.toDataURL();
document.getElementById('canvasImg').src = canvasData;
};
#myCanvas {
background: url("images/<s:property value="userImageFileName"/>");
background-size: 100% 100%;
background-repeat: no-repeat;
}
#myCanvas,
#tempcanvas {
cursor: pointer;
border: 1px solid black;
position: absolute;
left: 0;
top: 0;
}
#myCanvas:active,
#tempcanvas:active {
cursor: crosshair;
}
<html>
<head>
<title>Success: Upload User Image</title>
</head>
<body>
<canvas id="myCanvas" width="300" height="300" style="border:1px solid #d3d3d3;">Please use a modern browser like Firefox, Chrome, Safari</canvas>
<canvas id="tempcanvas" width="300" height="300" style="border:1px solid #d3d3d3;"></canvas>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<form>
<select name='tool' onChange="split()">
<option value='2'>Pen</option>
<option value='5'>Sketch</option>
</select>
<select name='disease' onChange="split()">
<option>Exudates</option>
<option>Red Lessions</option>
</select>
</form>
<input type="button" value="eraser" onClick="erase()" />
<input type="button" value="circles" onclick="draw('Circles')" />
<input type="button" value="lines" onclick="draw('Lines')" />
<input type="submit" value="save" onClick="save()" />
</body>
</html>
当互联网上没有任何帮助时,我终于自己找到了答案。此处更改了擦除的代码。
function erase(){
var mousedown = false;
tempcanvas.onmousedown = function(e) {
mousedown = true;
};
tempcanvas.onmouseup = function(e) {
mousedown = false;
};
tempcanvas.onmousemove = function(e) {
if (!mousedown) return;
var pos = getPosition(e, canvas);
context.clearRect(pos.x,pos.y,10,10);
};
}
- HTML画布在绘图后立即擦除矩形
- 为什么缩放按钮不会显示在照片擦除中
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- 应用程序脚本中导入HTML的数据擦除;谷歌表格
- 正在擦除要重新显示的单元格
- 通过python擦除Vine数据
- 擦除单元格问题
- 尝试擦除时删除输入中的零
- 擦除画布中的矩形,但它们会回来
- 如何使用 javascript 向我的 html 添加内容而不擦除整个页面
- Javascript用光标擦除图像
- 停止Angular JS ng视图擦除页面
- 为什么Jquery UI会擦除我的输入框
- HtmlWebpackPlugin擦除模板分区
- HTML5 画布擦除绘制的对象
- HTML5 画布 - 使用剪辑擦除新圆圈后重新绘制新圆圈
- 无法擦除画布上绘制的线条
- SVG路径绘制和擦除动画
- 在HTML5画布上擦除先前绘制的线条
- 擦除画布绘制的png图像