나는 KineticJS로 간단한 페인트 프로그램을 작성 중입니다. 내가 달성해야하는 것은 마우스 움직임으로 직사각형, 선 또는 원을 그려서 그려진 모양을 마우스로 드래그하거나 크기를 조정할 수 있습니다. 내 문제는 mousedown 및 mousemove 이벤트를 사용하여 도면을 작성해야하지만 동시에 끌어서 놓기 또는 크기 조정을 수행 할 수 없다는 점입니다. 나는 그것을 클릭하면mousemove로 도형 그리기, kineticjs로 끌어서 놓기 및 크기 조정 - KineticJS
stage.on("mousedown", function()
{
if((drawFlag==1)&&(dragFlag==0))
{
if (moving)
{
moving = false;
layer.draw();
}
else
{
var mousePos = stage.getMousePosition();
line = new Kinetic.Line
({
points: [0, 0, 50, 50],
stroke: "red"
});
layer.add(line);
line.getPoints()[0].x = mousePos.x;
line.getPoints()[0].y = mousePos.y;
line.getPoints()[1].x = mousePos.x;
line.getPoints()[1].y = mousePos.y;
moving = true;
layer.drawScene();
}
}
if((drawFlag==2)&&(dragFlag==0))
{
if (moving)
{
moving = false;
layer.draw();
}
else
{
var mousePos = stage.getMousePosition();
rect = new Kinetic.Rect
({
x:20,
y:20,
fill:"red",
stroke:"black",
strokeWidth: 2,
draggle:true,
width:0,
height:0
});
rect.setX(mousePos.x);
rect.setY(mousePos.y);
rect.setWidth(0);
rect.setHeight(0);
moving=true;
layer.drawScene();
layer.add(rect);
Rects.push(rect);
}
}
});
stage.on("mousemove", function()
{
if((drawFlag==1)&&(dragFlag==0))
{
if (moving)
{
var mousePos = stage.getMousePosition();
var x = mousePos.x;
var y = mousePos.y;
line.getPoints()[1].x = mousePos.x;
line.getPoints()[1].y = mousePos.y;
moving = true;
layer.drawScene();
}
}
if((drawFlag==2)&&(dragFlag==0))
{
if(moving)
{
var mousePos = stage.getMousePosition();
var x = mousePos.x;
var y = mousePos.y;
rect.setWidth(mousePos.x-rect.getX());
rect.setHeight(mousePos.y-rect.getY());
moving = true;
layer.drawScene();
}
}
});
stage.on("mouseup", function()
{
moving = false;
});
사각형을 그린 후,이 마우스 움직임을 드래그 할 예정이다 다음은 도면에 대한 내 코드입니다. 그러나, 내 프로그램에서 그려진 사각형을 클릭하면 끌기 대신 다른 그림을 그리게됩니다. 그래서 dragFlag를 사용하여 드로잉 또는 드래그 여부를 나타냅니다. 그리고 마우스 커서가 그려진 사각형 위에 있는지 여부를 확인하는 함수를 사용합니다.
for(var n=0;n<Rects.length;n++){
(function(){
Rects[n].on('mouseover',function()
{
dragFlag=1;
document.body.style.cursor = "pointer";
});
Rects[n].on('mouseout',function()
{
dragFlag=0;
document.body.style.cursor = "default";
});
if(dragFlag==1)
{
Rects[n].on("dragstart", function()
{
Rects[n].moveToTop();
layer.draw();
});
Rects[n].on("dragmove", function()
{
document.body.style.cursor = "pointer";
});
}
});
하지만 작동하지 않습니다. 내 마우스 커서의 위치를 확인할 수 없으므로 그려진 그리드를 클릭하면서 새 사각형을 그리는 중입니다. 마우스 움직임으로 그리기를 수행하고 끌어온 도형을 끌어다 놓는 방법을 아는 사람은 누구입니까? 도와 주셔서 감사합니다.
가 함께 jsfiddle을 넣어 – SoluableNonagon