我需要在另一个SVG文档中包含一个SVG文档(实际上是3个),以便滚动嵌入的SVG文档。
我使用Batik JSVGCanvas
在Java应用程序中显示它。由于将该画布放入JScrollPane
并将画布的大小设置为非常大的大小会消耗大量内存(JSVGCanvas
似乎没有任何内存效率),我想减少SVG的可见部分,使用viewBox属性并使用SVG Scrollbars在文档内滚动。
但似乎通过<image>
标记在SVG中嵌入SVG只会将该文档作为图像导入,而不是作为另一个SVG文档导入。甚至不评估<desc>
或<title>
标记以提供元素的工具提示。我还需要嵌入式SVG中的动态功能(一些元素必须是可点击的,我为java应用程序中的那些点击提供处理程序)。我还需要在运行时修改嵌入式SVG DOM。我不知道如何从Batik中访问嵌入式SVG。
似乎所有这一切都是不可能的。我误解了<image>
标签了吗?还有另一种方法可以在维护动态功能的同时将SVG文档嵌入到另一个SVG文档中吗?
我想做的是这样的事情:
+-------------------------------------------------------------+
|+-----------------------------------------------------------+|
|| ||
|| upper embedded SVG ||
|| ||
|+-----------------------------------------------------------+|
|+-----------------------------------------------------------+|
|| ||
|| ||
|| ||
|| lower embedded SVG ||
|| ||
|| ||
|| ||
|| ||
|| ||
|+-----------------------------------------------------------+|
|+-----------------------------------------------------------+|
||< horizontal scrollbar >||
|+-----------------------------------------------------------+|
+-------------------------------------------------------------+
滚动条应滚动上部和下部嵌入式SVG的viewBox。但我仍然需要访问这些文档来修改他们的DOM以及动态的需要(对鼠标悬停,点击等做出反应)。
答案 0 :(得分:1)
您无需使用<image>
来嵌入其他SVG。将<svg>
置于另一个<svg>
<svg id="upper">
...etc...
</svg>
<svg id="lower" y="200px">
...etc...
</svg>
</svg>
内是合法的。例如:
{{1}}
你试过吗?