javascript - Raphael JS 嵌套转换

标签 javascript raphael nested-sets

我想在 Raphael JS 中使用多个嵌套集,就像在 photoshop 中使用图层一样。也就是说:集合中的对象可能有自己的变换,并且作为集合的位置,它们在集合中变得相对定位。并且 set 也可能有它自己的转换。

现在看来,当应用集合转换时,它只是分别对每个元素执行它,并且相对于页面具有绝对位置。

有了这个机制,我遇到了这样一个简单的问题:我有集合和矩形。然后我调整矩形的大小 scale(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");
  });
});

我应该如何更正此代码以使我的矩形以相同的速度移动?


理论上,我同时移动一组对象所需要做的就是控制转换顺序。我还没有找到内置的解决方案,所以有一个小技巧可以插入一组已经应用于元素的“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;
}

最佳答案

http://raphaeljs.com/reference.html#Element.transform

// if you want you can append or prepend transformations
el.transform("...t50,50");
el.transform("s2...");

关于javascript - Raphael JS 嵌套转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849678/

相关文章:

mysql - 将邻接表模型和嵌套集模型结合起来是否被认为是糟糕的设计?

android - Android sqlite 数据库中是否可以嵌套集?

php - 处理 mysql 中的嵌套集?

Javascript 无法正确排序包含两个数组值的数组

javascript - 拉斐尔 JS - paper.remove

javascript - 将下拉选择滚动条置于所选元素的中心

javascript - Raphael JS - 在鼠标悬停期间开始/继续动画。鼠标移出时暂停动画

svg - 如何使 Chrome/Firefox 与 IE 7 和 8 的 RaphaelJS 垂直对齐文本?

javascript - 在 casperjs 步骤中启用/禁用 javascript?

javascript - 媒体查询不工作最大宽度 : 900px