当我尝试使用45度旋转移动的正常移动拖动功能直线移动时,我有一个旋转45度的矩形。我已经看过很多关于此的帖子,并且这是打算像这样工作,但我还没有找到一个简单的方法来解决这个问题。
我知道raphael.free_transform.js插件,但我不需要90%的脚本。
从其他帖子我知道我应该使用Math.atan2但是我的数学技能不是很好。
我当前的移动功能如下所示:
function (dx, dy) {
var att = this.type == "rect" ? {x: this.ox + dx, y: this.oy + dy} : {cx: this.ox + dx, cy: this.oy + dy};
this.attr(att);
for (var i = connections.length; i--;) {
r.connection(connections[i]);
}
r.safari();
}
答案 0 :(得分:1)
您必须使用“转换”方法,而不是简单地更改x-y attrs。
var data = {};
var R = Raphael('raphael', 500, 500);
var rect = R.rect(100, 100, 100, 50).attr({fill: "#aa5555"}).transform('r45');
var default_transform = rect.transform();
var onmove = function (dx, dy) {
rect.transform(default_transform + 'T' + dx + ',' + dy);
};
var onstart = function () {};
var onend = function () {
default_transform = rect.transform();
};
rect.drag(onmove, onstart, onend);
我已经在JSfiddle上为您创建了一个实时演示: http://jsfiddle.net/pybBq/
请注意,您必须在变换字符串中使用较大的 T 字母(不小于 t )才能使变换成为绝对变换而非相对变换。请阅读Raphael关于转换的文档以获取更多信息:http://raphaeljs.com/reference.html#Element.transform