我正在尝试使用jQuery SVG在jQuery中对SVG中的形状做一些基本动画。
每当我尝试设置标准元素的动画时,我的控制台都会抛出错误:
代码:
// Load the map - this works fine!
var svgNode = $(divSelector).svg('get');
svgNode.clear();
svgNode.load(mapPath, {
addTo: false,
changeSize: true,
onLoad: resizeSvg // This is a function elsewhere that resizes the SVG to fill or fit within the container, using a viewbox.
});
// Try to animate all path objects
var objSelector = 'path';
// Got to add svgNode.root() to the selector, or jQuery doesn't know where to look.
if( $($(objSelector), svgNode.root()).length > 0 ) {
$($(objSelector), svgNode.root() ).animate({
'svgFill': 'lightblue'
}, 2000);
}
这会在控制台中引发以下错误:
未捕获的TypeError:undefined不是函数(jquery.svganim.js:250)
看起来jQuery接受了animate调用,并将其正确传递给jQuery SVG的动画脚本,但它失败了。仍不确定原因。
我想通过命名空间属性的值引用一个对象,即inkscape:label。我以前在CSS中遇到过这个问题,它通过在CSS文件的顶部添加@namespace
标记并通过inkscape|label
引用属性键来解决,但jQuery SVG似乎找到对象有自己的问题:
var svgNode = $(divSelector).svg('get');
var labelVal = 'foo';
var objSelector = '[inkscape\|label=\"' + labelVal + '\"]';
console.log("Selector String: '" + objSelector + "'");
console.log("Objects matched: " + $($(objSelector), svgNode.root()).length );
尽管至少有一个匹配foo
的SVG路径元素,但这始终是控制台的输出:
Selector String: '[inkscape\|label="foo"]'
Objects matched: 0
我尝试了各种编写选择器的方法,包括(但不限于):
inkscape:label
inkscape|label
inkscape\\:label
inkscape\\|label
inkscape\\\:label
inkscape\\\|label
但似乎没有任何效果。有些人抛出错误,有些则没有,但仍然找到0个对象。仅使用path
作为选择器的相同控制台日志消息正确识别文件中的42个元素。
我只能假设jQuery SVG遇到了命名空间属性名称的问题,但我不知道如何让它像我在CSS文件中那样使用它。
任何建议都很棒,啤酒也会欠。
答案 0 :(得分:0)
问题2:
我想通过命名空间属性的值引用一个对象, 即inkscape:标签
尝试
"[inkscape\\:label=" + labelVal + "]"
var labelVal = "abc";
$("[inkscape\\:label=" + labelVal + "]").text("abc");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div inkscape:label="abc"></div>