我已经搜索了这个问题的答案并尝试了许多建议的解决方案,但似乎都没有奏效。我一直在为此苦苦挣扎,因此非常感谢任何见解。
我在 JS 画布上有 3 个形状(我想是矢量),每个形状的方向表示为偏离 0 的度数和宽度。我需要从它的方向“直接”拖动这些形状之一。这很难用语言解释,所以请查看我创建的图形:
中间(对角线)形状为 45 度。它的原点是红点,(x1,y1)。用户拖动形状,他们的鼠标位于绿点 (x2,y2)。由于形状的原点在左下角,我需要将形状定位在浅蓝色形状的位置,就好像用户从形状的原点直接向外拖动一样。
我认为这并不重要,但我用来执行此操作的库是 KineticJS。这是我可用的代码和一些信息,它们可能有助于解决问题。此代码将形状定位在鼠标顶部,这不是我想要的:
var rotationDeg = this.model.get("DisplayOri"), // rotation in degrees
rotationRadians = rotationDeg * Math.PI / 180, // rotation in rads
unchanged = this.content.getAbsolutePosition(), // {x,y} of the shape before any dragging
dragBoundFunc = function (changed) {
// called on a mouseMove event, so changed is always different and is the x,y of mouse on stage
var delta = {
x: changed.x - unchanged.x,
y: changed.y - unchanged.y
};
return changed; // go to the mouse position
};
[编辑] 我应该提一下,“return delta”的明显效果是行不通的。