首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等待<object>内部的SVG在某些JS触发之前完成加载?

如何等待<object>内部的SVG在某些JS触发之前完成加载?
EN

Stack Overflow用户
提问于 2015-01-02 22:28:08
回答 3查看 7.9K关注 0票数 9

我已经在我的html中找到了这个( SVG大约是500 K):

代码语言:javascript
复制
<object type="image/svg+xml" data="/assets/images/test-diagram.svg" width="100%" height="100%" id="arm" class="svg-content"></object>

我在GitHub上使用一个脚本为SVG创建一个视口,这样我就可以平移并放大视口,但就像GoogleMaps一样。

https://github.com/ariutta/svg-pan-zoom

因此,加载顺序需要:

  1. svg-pan-zoom.js完成
  2. 所有500 k的svg都需要完成加载
  3. 需要运行以下代码: var panZoomArm = svgPanZoom('#arm');

不幸的是,当SVG没有完全加载时,上面的代码就会运行,从而导致错误。

我试过了,但是.load似乎不是为<object>而设计的--事实上,debugger从未被触发

代码语言:javascript
复制
$('#arm').load(function(){
    debugger
    var panZoomArm = svgPanZoom('#arm');
});

这些方法让我告诉代码只在500 k svg完全下载之后才运行吗?

我唯一可靠地启动这个代码的方法是使SVG完全内联.这就像数百行没有缓存能力的代码。

编辑

好吧,我开始工作了,但我很困惑。

这不起作用(调试器从不触发):

代码语言:javascript
复制
$('#arm').load(function(){
    debugger
    var panZoomArm = svgPanZoom('#arm');
});

这样做是可行的:

代码语言:javascript
复制
var arm = document.getElementById("arm");
arm.addEventListener('load', function(){
    debugger
    var panZoomArm = svgPanZoom('#arm');
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-06 22:06:49

我就是这么让它起作用的

代码语言:javascript
复制
<object type="image/svg+xml" data="/assets/images/test-diagram.svg" width="100%" height="100%" id="arm" class="svg-content"></object>

var arm = document.getElementById("arm");
arm.addEventListener('load', function(){
    var panZoomArm = svgPanZoom('#arm');
});
票数 4
EN

Stack Overflow用户

发布于 2015-01-03 05:27:14

在这些情况下,您可以设置一个interval,它每隔一秒钟运行一次。然后,当调试器运行或var panZoomArm使用以下代码获得一个值时,清除它:

代码语言:javascript
复制
if (typeof panZoomArm !== 'undefined') {
    // the variable is defined
    clearInterval(yourInterval);
}

希望它能帮到你!

票数 1
EN

Stack Overflow用户

发布于 2018-05-24 18:17:16

最好使用find而不是load来检查SVG元素是否已完成加载。

检查以确定元素是否已就绪。如果没有,请使用setTimeout

代码语言:javascript
复制
 function checkReady() {
    
    if (!$('#arm').find('svg')[0]) {
        setTimeout(function(){checkReady();}, 300);
    } else { 
        debugger
        var panZoomArm = svgPanZoom('#arm');   
    }
    
  } 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27749367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档