iFrame.load事件未等待预加载图像完成
iFrame .load event not waiting for preloading images to finish
我建立了一个公文包网站,其中包含一个用于展示艺术品的iFrame。为了显示每个艺术品,将在iFrame中加载一个包含大图像的html页面。
iFrame在为空时隐藏(display:none
),并且应该只有在内容完全加载时才会淡入。
//pass url of artwork page to iFrame
$("#creativeiframe").attr('src', thisLink.attr('href'));
//fade up iFrame once content loaded
$('#creativeiframe').load(function() {
$('#creativeiframe').fadeIn(300);
});
我按预期进行了这项工作-只有当内容(包括已完全加载的大图像)时,iFrame才会加载,但加载缓慢促使我尝试预加载艺术品图像,以便在用户单击将其加载到iFrame之前开始下载。
function preloadImage(url)
{
var img=new Image();
img.src=url;
}
现在我遇到了一个问题——有时,当用户点击加载图片时,iFrame会逐渐消失,显示半加载的图像,或者更糟的是,只显示html内容而不加载图像。我看过Chrome开发工具网络检查器,当有问题的图像已经开始预加载,但还没有完成时,就会出现这种情况。
所以我的问题是:
有人知道为什么会发生这种事吗?是因为在预加载的情况下,当iFrame src发生更改时,没有对映像的网络请求,所以
.load
事件不会等待映像加载吗?有没有一种方法可以让iFrame
.load
事件等待"半预加载"的图像在启动前完成加载?
我通过在子HTML文档中运行一个脚本来检测图像加载,最终实现了这一点。然后,这会触发父文档中的"淡入淡出功能",淡入包含的iFrame。
<script type='text/javascript'>
var img = new Image();
img.onload = function(){
window.parent.fadeFn();
}
<?php echo"img.src='".$fileNameVar."'"?>
</script>
img标记中还有一个.load()函数,可以用来显示图像是否已完全加载。
因此,我认为您可以使用.load()函数来启用/禁用iframe点击。
或者显示等待指示器,也许更好。
EDIT:这是不正确的,我很困惑加载事件是在DOM完全加载时触发的,但不包括外部图像。
您应该能够使用ready()事件执行您想要的操作:
//no reason to run the jQuery selector multiple times
var creativeIframe = $("#creativeiframe");
//fade up iFrame once content loaded
creativeIframe.ready(function() {
creativeIframe.fadeIn(300);
});
- 如何在谷歌字体加载时显示加载图像
- 预加载图像并插入DOM
- 加载图像时加载图标
- 在页面启动期间加载图像
- 预加载图像image.onload脚本MVC
- 可以't在我的React组件中加载图像
- 加载图像后调整HTML画布的大小
- HTML/JS github页面项目没有't在使用firefox运行时加载图像或声音
- 错误:$injector:modulerr加载图像时模块处于角度
- 谷歌地图加载后隐藏加载图像
- 在照片查看器(Javascript和jQuery)中异步加载图像时可能出现错误
- 正在从字节数组加载图像内容
- 网页上已有tinymce加载图像列表
- 单击提交按钮后加载图像将冻结
- 如何使用Express'正确加载图像;s的静态中间件
- 使用jquery即时加载图像
- Html5画布使用JCanvasScript加载图像
- Javascript使用JCanvaScript在画布中加载图像
- 使用jquery/ajax显示加载图像
- ajax缓存false无法加载图像