我遇到了集合问题以及如何应用变换.我来自图形背景,所以我熟悉场景图以及普通的SVG组语法,但Raphael让我很困惑.假设我有一个圆圈和一组,我想在其上应用变换.
circle = paper.circle(0,0.5)
set = paper.set()
Run Code Online (Sandbox Code Playgroud)
如果我先添加圆圈,然后进行变换,则可以正常工作.
set.push circle
set.transform("s100,100")
Run Code Online (Sandbox Code Playgroud)
制作50个半径圆.但是,如果我颠倒了订单,
set.transform("s100,100")
set.push circle
Run Code Online (Sandbox Code Playgroud)
不应用转换.
这似乎会破坏许多渲染和动画类型算法,其中您的组/变换保持关节状态,并且您可以向它们添加或删除对象,而不是每次都重新创建整个变换.在文档中的某个地方是否有一个选项,我没有看到它解决这个问题,或者这个功能是否有利于简单?考虑到在SVG本身的组层次结构中直接且容易地支持它似乎很奇怪...我是否需要手动将变换从集合应用到变换集合后添加的任何子节点?
Raphael中的套装只是简单的阵列.
当您在set上执行某些操作时,Raphael会通过for(...){}循环遍历所有成员.
Raphael不支持SVG组 <g></g>
更新 Raphael的代码:
// Set
var Set = function (items) {
this.items = [];
this.length = 0;
this.type = "set";
if (items) {
for (var i = 0, ii = items.length; i < ii; i++) {
if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) {
this[this.items.length] = this.items[this.items.length] = items[i];
this.length++;
}
}
}
},
Run Code Online (Sandbox Code Playgroud)
如您所见,所有项目都存储在this.items数组中.