【发布时间】:2013-12-20 10:32:37
【问题描述】:
我正在尝试将调整大小的手柄放在矩形的四个角上,可以拖动它来调整矩形的大小。我遇到的问题是在拖动矩形的一个点后计算矩形的新宽度、新高度和新点。
如果矩形没有被旋转,这显然会很容易,因为宽度和高度的变化量与鼠标的 offsetX 和 offsetY 相同。但是,这个矩形是可以旋转的,所以 offsetX 和 offsetY 不匹配宽度/高度的变化。
在上图中,我用纯黑色表示了我已经拥有的信息,用浅灰色表示了我想要查找的信息。我试图展示如果我将 a1 角向上和向右拖动,矩形应该如何变化。
谁能帮我弄清楚如何计算缺失的信息?
感谢您的帮助!非常感谢。
--
编辑:我在每个手柄上都有拖动开始、拖动移动和拖动结束回调。我当前的代码只是得到了新的点(在这个例子中,a2)。不幸的是,这只是将我们当前拖动的手柄移动到新位置,但显然对矩形的宽度/高度及其其他点的位置没有影响。我希望帮助弄清楚的是如何根据这个阻力计算新的宽度和高度,以及其他点的新位置。
手柄坐标(拖动前)
handles: {
a: { x: 11, y: 31 },
b: { x: 44, y: 12 },
c: { x: 39, y: 2 },
d: { x: 6, y: 21 }
};
回调:
// Save the original x and original y coordinates
// of the handle, before dragging
onDragStart: function(x, y, handle) {
handle.data({
ox: x,
oy: y
});
}
// While dragging the handle, update it's coordinates to
// reflect its new position
onDragMove: function(dx, dy, handle) {
handle.attr({
x: handle.data('ox') + dx,
y: handle.data('oy') + dy
});
}
// Not currently using the drag end callback
onDragEnd: function(x,y,handle) {}
【问题讨论】:
-
您能向我们展示一下您目前拥有的代码 sn-p 吗?
-
@Shurane 我一直在尝试解决这个问题,并为此编写了很多代码,但没有任何帮助,所以它被丢弃了。但我会把我有的那一点点扔进去。
-
如果你能在jsfiddle.net上提供一个可证明的例子,我将不胜感激
-
不幸的是,没有什么可展示的。几天来,我一直在谷歌搜索诸如“翻译矩形一个坐标”和“javascript 调整可旋转手柄大小”和“矩形几何”之类的东西,但实际上一无所获。我所能做的就是将拖动的手柄移动到它的新位置,但在计算新点和边时我什至不确定从哪里开始。但我会尝试在问题中添加尽可能多的有用信息。
标签: javascript rotation resize draggable drag