Javascript 如何将Raphael.js集移动到特定位置?

Javascript 如何将Raphael.js集移动到特定位置?,javascript,animation,raphael,Javascript,Animation,Raphael,如果我使用raphael.js将单个元素设置为特定位置的动画,那么我可以使用以下代码设置元素x属性: elem.animate({x: specific_X_Location}, 1000); 但是我找不到方法将集合移动到特定位置 有两个这样的条款: ,和 讨论如何将集合平移给定距离(即将集合向右移动100或向上移动100),使用变换或平移,例如 var mySet = paper.set(); mySet.push(...add elements to set); mySet.animat

如果我使用raphael.js将单个元素设置为特定位置的动画,那么我可以使用以下代码设置元素
x
属性:

elem.animate({x: specific_X_Location}, 1000);
但是我找不到方法将
集合
移动到特定位置

有两个这样的条款: ,和

讨论如何将集合平移给定距离(即将集合向右移动100或向上移动100),使用变换或平移,例如

var mySet = paper.set();
mySet.push(...add elements to set);
mySet.animate({transform: "t100,0"}, 1000); // move my set right by 100
但似乎没有办法将整个场景移动到特定的位置

看看firebug中的东西,我猜集合最终只是一个数组,这就是为什么它没有
x
y
属性的原因

是否可以访问有关集合元素的任何信息而不单独寻址

为了将一个集合变换到一个特定的位置,你认为我必须对一个特定的元素进行变换,然后将这个变换应用到整个集合中吗?还是我错过了一条更好的路


非常感谢

你说得对,这个集合只是一个数组。 可悲的是,至少从我收集的资料来看,没有一种简单的方法可以移动一整套。 我在一个项目中也遇到了同样的问题,我整个晚上都在工作。 似乎该集合对于将属性等应用于一大组对象最为有用。如果你想在屏幕上画一百个红圈,那就说这是你的人。 但是,如果您尝试将转换应用于集合,它的工作方式将与应用属性相同——它的全局属性应用于集合。这意味着您的所有圆都将指向相同的坐标和比例等,而不仅仅是一个。 我一直在使用的一种解决方法是使用exclude和getById,如下所示:

 yourSet.exclude(paper.getById('2'));
一旦将对象从集合中排除,就可以像这样将变换应用于奇异对象

 paper.getById('2').transform('t230,265s3');
然后,只需对每个要移动的对象重复操作

您可以想象,对于大型集合来说,这是非常乏味的,您也可以只使用单数var语法(除非您将属性应用于一组对象)

我想知道是否有一种方法可以使用数组语法和数学来实现这一点,但是你必须弄清楚对象之间的所有关系


或者我们可以看看拉斐尔的新版本是否包含某种简单的集合变换。那真是天才。

你说得对,集合只是一个数组。 可悲的是,至少从我收集的资料来看,没有一种简单的方法可以移动一整套。 我在一个项目中也遇到了同样的问题,我整个晚上都在工作。 似乎该集合对于将属性等应用于一大组对象最为有用。如果你想在屏幕上画一百个红圈,那就说这是你的人。 但是,如果您尝试将转换应用于集合,它的工作方式将与应用属性相同——它的全局属性应用于集合。这意味着您的所有圆都将指向相同的坐标和比例等,而不仅仅是一个。 我一直在使用的一种解决方法是使用exclude和getById,如下所示:

 yourSet.exclude(paper.getById('2'));
一旦将对象从集合中排除,就可以像这样将变换应用于奇异对象

 paper.getById('2').transform('t230,265s3');
然后,只需对每个要移动的对象重复操作

您可以想象,对于大型集合来说,这是非常乏味的,您也可以只使用单数var语法(除非您将属性应用于一组对象)

我想知道是否有一种方法可以使用数组语法和数学来实现这一点,但是你必须弄清楚对象之间的所有关系


或者我们可以看看拉斐尔的新版本是否包含某种简单的集合变换。那太棒了。

您有没有在文档中查看过绝对变换命令,例如“T100,0”而不是“T100,0”?您是否在文档中查看过绝对变换命令,例如“T100,0”而不是“T100,0”?很好的解释,马特。非常感谢。仅供参考,刚才注意到您不必从集合中移除对象即可自行移动它。我认为在一台计算机上更改attr可能会混淆系统。但是转换可以应用于仍然在一个集合中的对象。我还注意到,在最新版本中,您实际上可以使用如下转换命令移动整个集合:mySet.transform('t-100100');如果您写出完整的缩放转换语法,甚至可以缩放整个集合:mySet.transform('s3,3,0,0');这将停止重新定位每个单独的项目,因为比例现在使用集合的中心,而不是每个项目的中心。希望这会有所帮助,而且不会太晚!此外,你不必使用“s3,3,0,0”,你可以设置任何你喜欢的中心,这样你就可以使用“s3,3,5,20”,这可以产生一些非常好的缩放效果。很好的解释。非常感谢。仅供参考,刚才注意到您不必从集合中移除对象即可自行移动它。我认为在一台计算机上更改attr可能会混淆系统。但是转换可以应用于仍然在一个集合中的对象。我还注意到,在最新版本中,您实际上可以使用如下转换命令移动整个集合:mySet.transform('t-100100');如果您写出完整的缩放转换语法,甚至可以缩放整个集合:mySet.transform('s3,3,0,0');这将停止重新定位每个单独的项目,因为比例现在使用集合的中心,而不是每个项目的中心。希望这会有所帮助,而且不会太晚!此外,你不必使用“s3,3,0,0”,你可以设置任何你喜欢的中心,这样你就可以使用“s3,3,5,20”,这可以产生一些非常好的缩放效果。