繁体   English   中英

如何使用Raphael js库拖动旋转的形状

[英]How to drag rotated shapes using Raphael js library

在拖动Raphael库创建的对象方面,我已经做了很多示例。 现在,我正在使用集,并且还能够编写代码来拖动它们。

现在, 当我旋转一个对象然后将其拖动时,我的问题就出现了

查看以下代码示例: demo

var paper = Raphael('stage', 300, 300);
var r = paper.rect(50,100,30,50).attr({fill:"#FFF"}).rotate(45),
    t = paper.text(30, 140, "Hello");

var p = paper.set(r, t);

r.set = p, t.set = p;


p.newTX=0,p.newTY=0,p.fDx=0,p.fDy=0,p.tAddX,p.tAddY,p.reInitialize=false,

start = function () {

},
move = function (dx, dy) {
    var a = this.set;
    a.tAddX=dx-a.fDx,a.tAddY=dy-a.fDy,a.fDx=dx,a.fDy=dy;
    if(a.reInitialize)
    {
        a.tAddX=0,a.fDx=0,a.tAddY=0;a.fDy=0,a.reInitialize=false;
    }
    else
    {
        a.newTX+=a.tAddX,a.newTY+=a.tAddY;
        a.attr({transform: "t"+a.newTX+","+a.newTY});
    }

},
up = function () {
    this.set.reInitialize=true;
};
p.drag(move, start, up);

通过检查DEMO,您可以看到该集是用旋转的矩形创建的,但是一旦拖动它,它就会回到0度状态。 为什么? 有什么办法吗?

问题在于,每当通过应用包含移动,旋转,缩放等指令的字符串来变换元素时,它都会重置变换对象,因此先前的变换会丢失。 为避免这种情况,请在转换字符串的开头添加“ ...”。 喜欢,

var el = paper.rect(10, 20, 300, 200);
// translate 100, 100, rotate 45°, translate -100, 0
el.transform("t100,100r45t-100,0");
// NOW, to move the element further by 50 px in both directions
el.transform("...t50,50");

如果使用“ t50,50”代替“ ... t50,50”,则“ t100,100r45t-100,0”的转换效果会丢失,而“ t50,50”规则的转换效果会消失。

拉斐尔参考资料以供进一步研究: http : //raphaeljs.com/reference.html#Element.transform

希望这可以帮助。

我找到了解决此问题的简便方法。 由于需要菱形而不是矩形,因此我创建了代表该菱形的路径。 然后,此路径就像旋转45度的正方形一样。 事实证明这很容易,因为我为程序提供的拖动功能可以完美地与路径配合使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM