问题:
我正在使用Snap.svg创建一些基本的交互式图形,但由于某种原因,我无法使用Snap.load()
加载外部SVG文件。我在snap.io上直接从tutorial提取代码并检查并仔细检查了文档。我的SVG文件在浏览器中呈现正常,它只是不显示在Snap SVG中。其他形状(即未使用Snap.load()
拉入)会显示。
CODE : 我把我的例子简化为可以想象的最简单的HTML和SVG文件,而Snap.load()方法仍然不适合我。有谁看到我错过了什么?
HTML :
<head>
<style media="screen">
#svg {
width: 300px;
height: 300px;
}
</style>
<script src="snap.svg-min.js"></script>
<meta charset=utf-8 />
</head>
<body>
<svg id="svg"></svg>
<script type="text/javascript">
var s = Snap("#svg");
Snap.load("svgtest.svg");
</script>
</body>
SVG(最初从Illustrator导出):
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="100px" height="100px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
<rect x="14" y="33" fill="#2BB673" width="70" height="30"/>
</svg>
更新: 根据@ Ian的建议更新了代码 -
var s = Snap("#svg");
Snap.load("http://www.w3.org/TR/SVG/images/struct/Use01.svg", onSVGLoaded ) ;
function onSVGLoaded( data ){
s.append( data );
}
- 但仍然没有显示外部SVG。我尝试使用SVG from w3.org只是为了确保文件本身或我的域名不会出现问题。
答案 0 :(得分:23)
load函数需要回调,因为加载可能需要一些时间。所以我认为你会做类似以下的事情......
var s = Snap("#svg");
Snap.load("svgtest.svg", onSVGLoaded ) ;
function onSVGLoaded( data ){
s.append( data );
}
编辑:如果不从与脚本相同的服务器访问,可能会出现一些访问控制问题,请检查控制台日志中是否有任何错误。
答案 1 :(得分:5)
我在Internet Explorer中只遇到了这个问题,结果是因为我加载的SVG文件是一个已删除doctype的缩小文件。其他浏览器在没有doctype的情况下也没问题,但是让doctype也解决了IE中的问题:
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
如果像我一样,你正在使用Grunt来缩小SVG,你可以通过在Gruntfile中添加以下选项来保留doctype:
svgmin: {
options: {
plugins: [
{ removeDoctype: false }
]
}
// etc...
}
答案 2 :(得分:0)
发行版中有一个小错误 - 请参阅https://github.com/adobe-webplatform/Snap.svg/issues/196。建议的修复工作正常。在线演示是有效的,因为它引用了更旧的库版本。
答案 3 :(得分:0)
安装了0.5.1版。上面正确答案中的代码需要重新编写如下:
var s = Snap();
Snap.load("svgtest.svg", onSVGLoaded ) ;
function onSVGLoaded( data ){
s.append( data );
}