使用事件捕获实时捕获img是否加载完毕, 实现iframe内容高度自动适应
如何判断在html中图片加载完毕呢?
给img图片加onload事件呗。
如何判断一个界面中所有的图片加载完毕呢?
给所有的图片加上onload事件呗。
如果有1000张图片那要怎么绑定事件呢?
我们用事件冒泡捕获, JS中神奇的事件冒泡捕获, 而且只要给父节点绑定一个事件就好了;(但是这样有个缺点)
这个是一个很重要的结论:
经过我的实验, 发现img标签加载成功以后的onload事件不会冒泡到他的父元素, 或者是body节点上。
但是我们通过addEventListener绑定事件捕获, 可以捕获到img标签加载成功;
DEMO如下:
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<div id="div0">
</div>
</body>
<script>
var div0 = document.getElementById("div0");
div0.innerHTML = ' <img src="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superplus/img/logo_white_ee663702.png" alt=""/> ' +
' <img src="http://static.cnblogs.com/images/logo_small.gif" alt=""/> ' +
' <img src="http://images2015.cnblogs.com/blog/420264/201511/420264-20151104130547883-1797298825.gif" alt=""/>';
div0.addEventListener("load", function(ev) {
ev = ev || window.event;
console.log("图片加载成功");
console.log( ev.target );
//很多事情可以在这边实现了,目前又有一张图片加载成功了
},true)
</script>
</html>
使用addEventLitener 绑定事件一定要最后一个参数, true;
经过测试audio和video的onload事件使用同样代码我们无法捕获到,DEMO如下;
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<div id="div1">
</div>
</body>
<script>var div1 = document.getElementById("div1");
div1.innerHTML = '<audio src="http://www.w3school.com.cn/i/horse.ogg" controls="controls"> Your browser does not support the audio element. </audio> '+
'<video src="http://www.w3school.com.cn/i/movie.ogg" width="320" height="240" controls="controls">Your browser does not support the video tag. </video>';
div1.addEventListener("load",function(ev) {
ev = ev || window.event;
console.log("音频加载成功");
console.log( ev.target );
},true)
</script>
</html>
因为img标签加载成功是只有捕获阶段, 没有冒泡阶段,为什么呢?
个人理解 , 如果img标签的onload事件会冒泡的话,那么给window或者document添加的onload事件就会多次执行, 所以冒泡事件是针对于onclick, onmosueover等用户层面的行为,但是捕获的话可以捕获到浏览器或者用户的事件!~。~!
为什么监听img元素是否加载完毕呢? 他的使用场景是什么样的呢?
我在项目中某些html页面使用了iframe, 这个iframe的高度是根据内部内容自动设置的, 所以要等到window.onload以后才能给能外部的iframe设置高度, 或者在DOM中每一张图片加载完毕以后同步设置外部iframe的高度;
使用addEventLitener 的缺点是,IE8和IE8以下的浏览器不支持,所以还是给那1000张图片一个个加onload事件吧....
作者: NONO
出处:http://www.cnblogs.com/diligenceday/
QQ:287101329
使用事件捕获实时捕获img是否加载完毕, 实现iframe内容高度自动适应的更多相关文章
- JavaScript在A页面判断B页面加载完毕(iframe load)
今天遇到一个需求,在A页面上判断B页面是否加载完毕(B页面是第三方页面),加载完毕时隐藏loading动画... 而平时我们一般做的事是在B页面上判断B页面是否加载完毕,进行操作. if(docume ...
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)转
关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...
- Duilib中Webbrowser事件完善使其支持判断页面加载完毕
在多iframe的页面中,需要结合DISPID_DOCUMENTCOMPLETE和DISPID_NAVIGATECOMPLETE2两个事件判断页面是否加载完毕,而duilib中没有提供对DISPID_ ...
- 深入理解DOM事件类型系列第六篇——加载事件
前面的话 提到加载事件,可能想到了window.onload,但实际上,加载事件是一大类事件,本文将详细介绍加载事件 load load事件是最常用的一个事件,当页面完全加载后(包括所有图像.java ...
- 用window的onload事件,窗体加载完毕的时候
<script type="text/javascript"> //用window的onload事件,窗体加载完毕的时候 window.onload=function( ...
- jq常用事件(on,blur,focus,change),js/jq等待图片(页面)加载完毕事件,js读取文件
jq常用事件(on,blur,focus,change) // 方法一(推荐) $('.box').on( "click",function() {} ) $('.box').on ...
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...
- 铵钮提交事件PostBack之后,一些动态加载的物件丢失
今早起来,发现skype有网友留言,情况大约如下,不过Insus.NET还是先感谢网友的测试.http://www.cnblogs.com/insus/p/3193619.html 如果你有看此篇博 ...
- jQuery页面加载完毕事件及jQuery与JavaScript的比较
1.jQuery概述 jQuery是一个JavaScript库,它集成了JavaScript.DOM.CSS和Ajax,简化了JavaScript编程,提倡write less, do more. 2 ...
随机推荐
- 第14章 位图和位块传输_14.4 GDI位图对象(2)
14.4.7 在位图上绘图 (1)在内存设备环境中绘图(与真实DC不同的是,内存DC的显示表面是个位图) (2)GetTextExtentPoint32函数:用于确定文本字符串的像素大小.(此大小就是 ...
- AC日记——鬼谷子的钱袋 codevs 2998
2998 鬼谷子的钱袋 2006年省队选拔赛湖南 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 鬼谷子非常聪明,正 ...
- FLEX的动画
1.使用自带效果 在Flex里面不像在Flash里面随意制作动画了,Flex更趋向于应用程序,而不是动画制作了,所以没有了时间轴的概念.在Flex中使用动画效果,可以用Flex自带的Effect,或者 ...
- Stunnel使用2
1.首先测试一下stunnel.exe,是否能正常运行,正常的话,不会报错,在桌面右下角位置显示. 2.第一步完成后,打开stunnel.conf,对stunnel进行配置,需要修改一下几项:(mys ...
- java内存设置
在上边红色框内加入java内存设置命令: -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
- java 22 - 20 多线程之线程池
程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互. 而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池. 线程池里的每一个线程代码结束后 ...
- Core Web API上使用Swagger提供API文档
在ASP.NET Core Web API上使用Swagger提供API文档 我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的AP ...
- [py]特殊函数+文件保护
1函数的好处 2函数的全局变量和局部变量 3,包和文件夹的区别 4,__name__ __file__ __doc__ #判断是否为主程序 if __name__=='__main__': pass ...
- redis 学习笔记(4)-HA高可用方案Sentinel配置
上一节中介绍了master-slave模式,在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然 ...
- 利用Spring的@Async异步处理改善web应用中耗时操作的用户体验
Web应用中,有时会遇到一些耗时很长的操作(比如:在后台生成100张报表再呈现,或 从ftp下载若干文件,综合处理后再返回给页面下载),用户在网页上点完按钮后,通常会遇到二个问题:页面超时.看不到处理 ...