0
사용자가 몇 줄을 그릴 수 있고 캔버스를 제거 할 수있는 캔버스를 만들려고합니다. 모든 것이 잘 작동하지만 일부 선을 제거한 다음 다른 선을 그릴 때 삭제 된 선도 표시됩니다. 마우스 다운이 수행되면 삭제 된 행이 표시됩니다. 이 문제를 해결하도록 도와주세요.캔버스의 선 그리기 html
<html>
<script type="text/javascript" src="https://rawgithub.com/kangax/fabric.js/master/dist/fabric.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script>
$(document).ready(function(){
$("#can").mousemove(function(e){handleMouseMove(e);});
})
</script>
<script type="text/javascript">
var arr_points = new Array();
var canvas;
var isDown;
function init() {
canvas = new fabric.Canvas('c', {
selection: false
});
canvas.on('mouse:down', function(o) {
isDown = true;
var pointer = canvas.getPointer(o.e);
start_point_x = pointer.x;
start_point_y = pointer.y;
var points = [pointer.x, pointer.y, pointer.x, pointer.y];
line = new fabric.Line(points, {
strokeWidth: 2,
fill: 'red',
stroke: 'red',
originX: 'center',
originY: 'center'
});
canvas.add(line);
});
canvas.on('mouse:move', function(o) {
if (!isDown) return;
var pointer = canvas.getPointer(o.e);
line.set({
x2: pointer.x,
y2: pointer.y
});
canvas.renderAll();
});
canvas.on('mouse:up', function(o) {
var pointer = canvas.getPointer(o.e);
var point_x = pointer.x;
var point_y = pointer.y;
arr_points.push([start_point_x,start_point_y,point_x,point_y]);
$(".canvas-container").append(
"<a class='remove_line' start_point_x='" + start_point_x + "' start_point_y='" + start_point_y + "' end_point_x='" + point_x +
"' end_point_y='" + point_y + "' href='#'><span style='position:absolute; left:" + (point_x + 10) + "px; top:" + (point_y - 7) + "px;'>X</span></a>"
)
isDown = false;
});
}
$(document).on('click','.remove_line',function(){
var len = arr_points.length;
var start_x = $(this).attr("start_point_x");
var start_y = $(this).attr("start_point_y");
var end_x = $(this).attr("end_point_x");
var end_y = $(this).attr("end_point_y");
for(i=0; i<len; i++){
if(start_x == arr_points[i][0] && start_y == arr_points[i][1] && end_x == arr_points[i][2] && end_y == arr_points[i][3]){
var temp_index = i;
}
}
arr_points.splice(temp_index, 1);
$(this).remove();
var canvas=document.getElementById("c");
var context=canvas.getContext("2d");
context.canvas.width = context.canvas.width;
context.clearRect(0, 0, context.canvas.width, context.canvas.height);
var newlen = arr_points.length;
for(i=0; i<newlen; i++){
context.beginPath();
context.strokeStyle ='red';
context.lineWidth = 2;
context.moveTo(arr_points[i][0],arr_points[i][1]);
context.lineTo(arr_points[i][2],arr_points[i][3]);
context.stroke();
context.closePath();
}
})
</script>
<body onload="init()">
<div><img src="sample.jpg" height="400" width="400" style="position:absolute;" /></div>
<canvas id="c" width="400" height="400" style="position:absolute;border:2px solid;"></canvas>
</body>
</html>
가능한 중복 [fabric.js 직선 및 클릭에 선택] (https://stackoverflow.com/questions/35016961/fabric-js-straight-line-and-select-on-click) – Durga