[英]Snap.svg - Rotate after drag not working
希望这是一个基本问题,可以轻松回答! 基本上,我想拖动一个形状,然后双击它并旋转90度。 但是,一旦您从起点移动形状,旋转就会变成麻烦。 我试图像这样重新计算旋转的中心点...
var bbox = tri.getBBox();
tri.animate({
transform: "R"+angle+"," + bbox.cx + "," + bbox.cy
}, 500)
参见小提琴... http://jsfiddle.net/henryJack/hsfor158/7/ 。
任何帮助,不胜感激!
我认为可能存在两个问题。
首先,转换将覆盖任何现有的转换,因此您要包括现有的转换,然后在其之上包括新的转换。
element.transform()
将现有的转换放置到位。 因此,您可以将新旧结合起来。
tri.animate({
transform: tri.transform() + "R"+angle+"," + bbox.cx + "," + bbox.cy
}, 500)
但是,我认为的第二个问题是,默认情况下,getBBox()不考虑转换,它会累积转换,因此您可能需要双击存储转换,然后使用它而不是transform()。
Snaps getBBox()有一个隐藏参数,如果您给它getBBox(1),我认为它将考虑到它的局部转换(对此我可能是错的,因此,如果您一定要知道,我会问一个这个特定主题有一个新问题,因为可能需要对源代码进行一些挖掘...源代码将参数称为isWithoutTransform,但我认为这取决于您如何解释这一点(发挥作用)。
因此,您可以将两者结合起来...
var bbox = tri.getBBox(1);
angle += 90;
tri.animate({
transform: tri.transform() + "r"+angle+"," + bbox.cx + "," + bbox.cy
}, 500);
可能会有更好的解决方案 ,但是可能会有更好的方法:如果您需要考虑应用于外部元素的进一步转换(例如,如果在一组已转换的元素中),它将变得更加复杂,您将需要添加像getTransformedBBox之类的函数或可能更好,提供了一个替代解决方案, 例如拖动外部组并旋转内部元素 。 无论如何,您都可以这样做作为替代解决方案(将元素添加到组中,添加拖动组,但只需旋转元素)!
通过使用额外的组,第二个更可靠的示例
var triGroup = s.group( tri )
var angle = 0;
var rotate = function() {
var bbox = tri.getBBox();
angle += 90;
bbox = tri.getBBox();
tri.animate({
transform: "r"+angle+"," + bbox.cx + "," + bbox.cy
}, 500);
}
triGroup.dblclick(rotate);
triGroup.drag();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.