Javascript 以分段方式构建Raphael路径对象
我正在尝试创建一个小的徒手绘图应用程序,并找出一种方法来将路径段(例如“L10,10”)添加到Raphael路径元素中。这表明这是不可能的 我试过这样做:Javascript 以分段方式构建Raphael路径对象,javascript,raphael,Javascript,Raphael,我正在尝试创建一个小的徒手绘图应用程序,并找出一种方法来将路径段(例如“L10,10”)添加到Raphael路径元素中。这表明这是不可能的 我试过这样做: var e = paper.path("M0,0L100,100") e.attr("path").push(["L",50,100]) …它确实改变了由e.attr(“path”)返回的数组,但没有改变图形,因此我猜这是不受支持的行为。看起来您必须调用.attr()的setter版本来更新显示。以下似乎有效: var e = paper.
var e = paper.path("M0,0L100,100")
e.attr("path").push(["L",50,100])
…它确实改变了由
e.attr(“path”)
返回的数组,但没有改变图形,因此我猜这是不受支持的行为。看起来您必须调用.attr()的setter版本来更新显示。以下似乎有效:
var e = paper.path("M0,0L100,100");
e.attr("path").push(["L",50,100]);
e.attr("path", e.attr("path"));
虽然这看起来很笨拙。不过,我真的看不到更好的使用push()的方法。看起来您必须调用setter版本的.attr()来更新显示。以下似乎有效:
var e = paper.path("M0,0L100,100");
e.attr("path").push(["L",50,100]);
e.attr("path", e.attr("path"));
虽然这看起来很笨拙。不过,我真的看不到使用push()更好的方法。我可以证实这是可行的:
var arr = somePath.attrs.path;
arr.push(["L", x, y]);
somePath.attr({path: arr});
我可以证实这是有效的:
var arr = somePath.attrs.path;
arr.push(["L", x, y]);
somePath.attr({path: arr});
通过查看Raphael 2源代码,我找到了一种高效创建增量路径的方法,方法是:
elem=paper.path()初始化路径
elem.node.setAttribute(“d”,elem.node.getAttribute(“d”)+newLineSegment),附加mousemove处理程序以直接更改SVG DOM路径
Raphael使用“d”属性在内部设置路径字符串,因此这应该是跨浏览器兼容的AFAICT(更新:实际上我错了;这只适用于SVG兼容的浏览器,而不是VML),同时绕过了我们不需要在内部循环上运行的一大堆代码元素上执行所有适当的内务管理,例如:elem.attr({path:elem.node.getAttribute(“d”)})
我已经完成了一个用于sketchpad的jQueryUI小部件,它使用了这个。如果你觉得开源这样的东西有用,请留下评论。如果有人感兴趣,我会看看我是否能做到这一点。在查看Raphael 2源代码后,我找到了一种有效创建增量路径的方法,方法是:
elem=paper.path()初始化路径
elem.node.setAttribute(“d”,elem.node.getAttribute(“d”)+newLineSegment),附加mousemove处理程序以直接更改SVG DOM路径
Raphael使用“d”属性在内部设置路径字符串,因此这应该是跨浏览器兼容的AFAICT(更新:实际上我错了;这只适用于SVG兼容的浏览器,而不是VML),同时绕过了我们不需要在内部循环上运行的一大堆代码元素上执行所有适当的内务管理,例如:elem.attr({path:elem.node.getAttribute(“d”)})
我已经完成了一个用于sketchpad的jQueryUI小部件,它使用了这个。如果你觉得开源这样的东西有用,请留下评论。如果有人感兴趣,我会看看是否能做到。是吗?不知道你的意思,但这似乎是一个类似的问题。不管怎样,我在下面回答。是吗?不确定你的意思,但这似乎是一个类似的问题。不管怎样,我在下面回答。