【发布时间】:2017-09-22 21:39:36
【问题描述】:
我想用 Snap.svg 构建 SVG 操作 UI,不是单独发送,而是使用服务器端图形包。
我需要 Snap.svg 来加载一个外部 svg 文件,分析其结构,为其某些元素定义一些事件侦听器(基于分析)并进行一些更改。
我注意到一个元素的子元素不仅仅包含由 XML 树定义的元素。因此,对孩子的简单遍历是行不通的。
或者,.selectAll 方法假定预先了解 svg 结构。
当然,这些可以有解决方法,但我想知道我是否错过了另一种更自然的遍历结构的方法。
【问题讨论】:
-
为什么 selectAll 假设有高级知识?
-
您更喜欢使用哪个来加载 svg 文件:Snap.load() 还是 Snap.ajax()?
-
关于selectAll:我的理解是它根据元素的类型或属性进行搜索。为了能够将其用于树的呼吸优先遍历(例如),您需要假设树结构以某种方式编码在属性中。关于 load() vs ajax() 我不在乎。无论如何,load() 只是对 ajax() 的调用。有什么我可以用 ajax 在解析时制作子字段来反映树结构的吗?
-
我想我明白了问题所在。 .children() 函数继承自 node 的 Web API。因此,它包含来自 SVG 空白空间的噪声。在接缝中,Snap.svg 需要一些方法来访问元素的正确 svg 子项。我会写一个插件来做到这一点,并会在这里发布。 (除非该功能已经存在,但我错过了它。)
-
您确定需要这样做吗?我无法完全说出您要做什么,因此我可能偏离了轨道,但是例如我很久以前就这样做了svg.dabbles.info/snaptut-loadselect-move,它可以让您单击任何元素(N 将旋转通过任何分层组元素) ,然后拖动它,它就会动画化。
标签: javascript svg snap.svg