SVG对象:延迟获取

引入一个SVG文件:

<embed id="mySVG" src="map.svg" type="image/svg+xml" />

这样就能在浏览器中看到SVG的图。

然而 ,要想在js中直接获取到SVG的对象:

svgDoc = document.getElementById("mySVG").getSVGDocument();

却会提示svgDoc为null。即使将该行代码放在ready函数中,也是同样的结果。

这是因为SVG的加载是需要时间的。js中的代码执行时,SVG还未加载完成,所以获取到的对象就是null。若打开一个SVG页面,等看到图后,将该行代码放在浏览器的控制台中执行,会发现能正常获取对象。

因此,要获取SVG对象,就要等SVG加载完成。考虑到SVG加载的时间并不一定,所以使用循环的方式来延迟获取:

var svgDoc = null;
var time = null;
// 载入SVG
var loadSvg = function() {
	svgDoc = document.getElementById("mySVG").getSVGDocument();
	if(svgDoc == null) {
		time = setTimeout("loadSvg()", 300);
	} else {
		clearTimeout(time);
		loadCallback();
	}
};

// 载入回调
var loadCallback = function() {
	console.log("加载完成");
};

$(function() {
	// 延迟加载
	setTimeout("loadSvg()", 300);	
});

如上。先等待300ms再获取SVG对象。若获取到的SVG对象是null,则等待300ms再次获取。重复该步骤,直到获取的SVG对象不是null。

特别注意对chrome浏览器而言,必须使用http的方式来访问页面时,getSVGDocument()函数才会生效。若直接用本地文件的方式打开,则getSVGDocument()函数会返回null。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值