【发布时间】:2019-12-17 19:36:36
【问题描述】:
我正在尝试编写一个快速的 javascript 简介,以便从 Inkscape 生成的 SVG 文件中为图层设置动画。 Inkscape 可以很好地将 inkscape:groupmode 属性设置为图层组的“图层”:
<g
transform="translate(-12.681101,-9.7947913)"
id="g2179"
inkscape:groupmode="layer"
inkscape:label="Frame 2"
style="display:inline"
>
所以我写了一个小脚本来查找所有这些节点,隐藏它们,然后显示它们 一个一个循环,有延迟:
<script type="text/javascript">
<![CDATA[
var layers;
var current = 0;
// show one at a time
function animate() {
if (layers.length > 0) {
layers[current].style.display = "none";
current = (current+1) % layers.length;
layers[current].style.display = "inline";
}
}
// on load, get layers and hide them
function init() {
layers = document.querySelectorAll("g[inkscape\\:groupmode='layer']");
alert(layers.length);
// hide all layers
for (var ii=0; ii < layers.length; ii++) {
layers[ii].style.display = "none";
}
setInterval(animate, 500);
}
]]>
</script>
init() 由 svg 元素上的 onload 调用:
<svg onload="init()">
不幸的是,querySelectorAll 调用返回了一个空的图层数组(警报显示为“0”)。我可以通过删除属性标识符来查询所有组元素,但这不是我想要的。
如何只选择图层元素?
编辑:完整示例,在 Firefox 71.0 和 Chrome 79.0.3945.79 在 Linux 中弹出“0”:
<svg
onload="init()"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="79.63958mm"
height="79.63958mm"
viewBox="0 0 79.63958 79.63958">
<script type="text/javascript">
<![CDATA[
var layers;
var current = 0;
// show one at a time
function animate() {
if (layers.length > 0) {
layers[current].style.display = "none";
current = (current+1) % layers.length;
layers[current].style.display = "inline";
}
}
// on load, get layers and hide them
function init() {
layers = document.querySelectorAll("g[inkscape\\:groupmode='layer']");
alert(layers.length);
// hide all layers
for (var ii=0; ii < layers.length; ii++) {
layers[ii].style.display = "none";
}
setInterval(animate, 500);
}
]]>
</script>
<g
inkscape:label="Frame 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-12.681101,-9.7947913)"
style="display:inline">
</g>
</svg>
【问题讨论】:
-
您正在寻找
g元素而不是.g类。更改为"g[inkscape\\:groupmode='layer']",或直接删除.g。 -
很好,将编辑修复。不幸的是仍然没有得到元素
-
没有类点它可以工作 - jsfiddle.net/d1kh20np
-
在 Chrome 或 Firefox 中仍然对我不起作用,我用无法正常工作的完整代码更新了问题。
标签: javascript svg