我没有一个比这个更好的问题标题了。如果您有一个,请随时对其进行编辑。
无论如何,我目前正在Dart和Polymer中编写SVG机械手,到目前为止效果很好。但是,当我尝试将SVG元素包装在另一个元素中时,浏览器将以这种方式更新SVG元素,使其不再可见。
例子:
SVG之前的操作。所有元素均可见并正确显示。
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="446px"
height="788.605px" viewBox="0 0 446 788.605" enable-background="new 0 0 446 788.605" xml:space="preserve">
<g><!-- some content --></g> <!-- wrap this element in another one -->
<g><!-- more content --></g>
</svg>
SVG操作后。
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="446px"
height="788.605px" viewBox="0 0 446 788.605" enable-background="new 0 0 446 788.605" xml:space="preserve">
<g><!-- wrapper -->
<g><!-- content not visible anymore --></g>
</g>
<g><!-- content still visible --></g>
</svg>
该操作的代码如下所示(飞镖):
Element _createWrapper(Element element) {
Element wrapper = new Element.tag('g');
var parent = element.parent;
int idx = parent.children.indexOf(element);
wrapper.append(element);
// insert wrapper at the original element's position
// in its parent
parent.children.insert(idx + 1, wrapper);
wrapper.append(element);
// if I use softReload() everything is visible again
//svg.softReload();
return wrapper;
}
void softReload() {
if (_svg != null) _svg.remove();
_svg = new SvgElement.svg(_svg.outerHtml);
$['container'].append(_svg);
}
如评论中所述,当我使用softReload()方法时,可以正确显示SVG。但是,我发现进行这样的“软重装”非常丑陋,因此,我不仅要寻求更好的解决方案,而且要问为什么会出现此问题。
您需要通过SvgElement.tag而不是Element.tag创建SVG元素。目前,您正在创建标记名称为g
而不是SVG<g>
元素的HTML元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句