Kas*_*tin 1 javascript nested-sets raphael
我在Raphael JS中有几个嵌套集,我想在photoshop中使用像图层一样.也就是说:集合中的对象可以有自己的变换,并且作为集合的位置,它们变得相对定位在集合中.并且set也可以拥有它自己的转换.
现在看来,当应用集合变换时,它只是分别对每个元素执行它,并且相对于页面具有绝对位置.
有了这些机制,我遇到了这样一个简单的问题:我有集合和矩形.然后我用尺度(0.5,0.5,0,0)调整矩形的大小; 然后我想拖动整个集合.我用set.translate(x,y)执行拖动.结果我得到的矩形比其他非缩放项目慢两倍.
var rdr = this;
this.paper = Raphael(0,0,1000,1000);
this.set = this.paper.set();
this.set.push(this.paper.rect(0,0,100,100)); // non-scaled rectangle
this.set.push(this.paper.rect(0,0,100,100).scale(0.5,0.5,0,0)); // scaled rectangle
$("body").bind("mousedown.RDR",function(e) {
var ox = e.pageX;
var oy = e.pageY;
$("body").bind("mousemove.RDR",function(e) {
rdr.set.translate(e.pageX-ox,e.pageY-oy);
ox = e.pageX;
oy = e.pageY;
}).bind("mouseup.RDR",function() {
$("body").unbind("mouseup.RDR").unbind("mousemove.RDR");
});
});
Run Code Online (Sandbox Code Playgroud)
我应该如何更正此代码以使我的矩形以相同的速度移动?
从理论上讲,我需要同时移动一组对象是一种控制变换顺序的方法.我还没有找到内置的解决方案,所以有一点hack插入已经应用于元素的集合"BEFORE"转换的转换:
Raphael.el.translateBefore = function(x,y) {
var matrix = this.matrix;
var transform = matrix.toTransformString();
transform = ("t"+x.toString()+","+y.toString()) + "," + transform;
this.transform(transform);
return this;
}
this.paper = Raphael(this.containerId,this.paperWidth,this.paperHeight);
// ????????? ????? ??? raphael.set ????? ????, ?? ????? ?????????? ??????
this.paper.set().__proto__.translateBefore = function(x,y) {
_.each(this,function(el) {
el.translateBefore(x,y);
});
return this;
}
Run Code Online (Sandbox Code Playgroud)
http://raphaeljs.com/reference.html#Element.transform
// if you want you can append or prepend transformations
el.transform("...t50,50");
el.transform("s2...");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1313 次 |
| 最近记录: |