奇怪,不知道为什么拉斐尔选择这样做。但不是太难绕过:
如果您查阅.transformPath() 方法的源代码,您会发现它是其他两种实用方法的组合:
transformPath = R.transformPath = function (path, transform) {
return mapPath(path, toMatrix(path, transform));
}
非常简单: .toMatrix() 将该转换字符串解析为矩阵,然后 mapPath 将该矩阵应用于路径字符串。
出于某种原因, mapPath 包含对.path2curve() 方法的调用,这就是您遇到问题的原因。所以我们需要获取该方法的源代码并对其进行修改:
var mapPathStraight = function (path, matrix) {
if (!matrix) {
return path;
}
var x, y, i, j, ii, jj, pathi;
//replace following line with .parsePathString(), which also parses path string into an array without adding curves
//path = path2curve(path);
path = Raphael.parsePathString(path);
for (i = 0, ii = path.length; i < ii; i++) {
pathi = path[i];
for (j = 1, jj = pathi.length; j < jj; j += 2) {
x = matrix.x(pathi[j], pathi[j + 1]);
y = matrix.y(pathi[j], pathi[j + 1]);
pathi[j] = x;
pathi[j + 1] = y;
}
}
return path;
};
现在我们可以实现这样的直线:
var trpath = mapPathStraight(path, Raphael.toMatrix(path, trans));
这给了我一个输出:
trpath: M100,110L140,150
这是jsFiddle