我希望能够点击一个容器/形状,并在移动鼠标时绘制一条可以连接到另一个容器/形状的线(一个端点有箭头)。理想情况下,我希望这条线能够自动对齐到目标元素。
我对EaselJS很陌生,不知道该如何实现。我找到了这个链接,但是看不懂: Drawing a Line in a html5 canvas using EaselJS
我对EaselJS很陌生,不知道该如何实现。我找到了这个链接,但是看不懂: Drawing a Line in a html5 canvas using EaselJS
这是我制作的一个快速演示。
关键步骤如下:
http://jsfiddle.net/lannymcnie/6rh7P/
// Listen for press
end.on("mousedown", handlePress);
// Listen for move/end
stage.addEventListener("stagemousemove", drawLine);
stage.addEventListener("stagemouseup", endDraw);
// Redraw (and remember to clear)
connection.graphics.clear()
.s("#f00")
.mt(0,0).lt(stage.mouseX-connection.x, stage.mouseY-connection.y);
// Get the drop target(s)
var targets = stage.getObjectsUnderPoint(stage.mouseX, stage.mouseY);
// Stop Listening
stage.removeEventListener("stagemousemove", drawLine);
stage.removeEventListener("stagemouseup", endDraw);
// Note: This will be a little harder if you are using object-oriented approach, because the scope gets lost.
我认为这是一个很有趣的挑战,只用15分钟就解决了。希望对你有所帮助!祝好。
[更新]
在EaselJS 0.8+中,可以保存任何图形命令并随时更新其值。这样可以避免您每一帧都要重新绘制整个形状。以下是一个快速示例:
connection.graphics.s("#f00").mt(0,0);
var command = connection.graphics.lt(0,0).command;
// Then later
command.x = stage.mouseX-connection.x;
command.y = stage.mouseY-connection.y;
stage.update();
这里有一个样例展示了图形命令(与本例无关):http://jsfiddle.net/lannymcnie/L2tm9xdm/
getObjectsUnderPoint
是像素完美的,因此我认为这对于此示例是更好的方法。 - Lanny