addEventListener('load')和.complete属性在img标签上的区别是什么?
what are the differences between addEventListener('load') and .complete property on the img tag
为什么我要用on或other呢?附加load
事件vs检查complete
属性
var img1 = document.querySelector('.img-1');
function loaded() {
// img loading
}
if (img1.complete) {
loaded();
}
或
var img1 = document.querySelector('.img-1');
img1.addEventListener('load', function() {
// woo yey image loaded
});
complete属性返回浏览器是否完成图片加载。
如果图片加载完成,complete属性返回true。如果图片没有加载完成,这个属性返回false。
在这种情况下,它们都在做同样的事情,但有可能事件发生在我们开始监听它们之前,所以可以使用
var img1 = document.querySelector('.img-1');
function loaded() {
// img has loaded
}
if (img1.complete) {
loaded();
}
else {
img1.addEventListener('load', loaded);
}
它们是严格不同的:
complete
属性仅表示浏览器是否仍在获取数据。每当它得到响应时,它将把complete
属性设置为true
,而不让您知道它是成功还是失败。
load
事件是一个Event
事件,只有当浏览器成功获取资源时才会触发(在chrome中,它甚至只有在图像被处理时才会触发,而不是在FF中)。
不能只用complete
属性代替load
事件。
如果你想知道图像是否已经加载,而不诉诸load
事件(例如,因为图像已经在HTML标记中声明),你还必须检查图像是否在其imageWidth
属性中有一个值。
src
设置为相同的值。如果图片已经加载,它将只从缓存中获取,如果还没有加载,则不会发生新的请求。
var broken = document.getElementById('broken');
var valid = document.getElementById('valid');
// when the window' load event fires, all resources declared in HTML will be either loaded, either broken.
window.onload = function(){
console.log('broken complete :', broken.complete);
console.log('broken loaded :', !!(broken.complete && broken.naturalWidth));
console.log('valid loaded :', !!(valid.complete && valid.naturalWidth));
// so it's too late to attach a load event
valid.onload = function(){console.log('loaded again');};
// except if we force it to fire again
valid.src = valid.src;
};
<img id="broken" src="http://fakeserver.co/brokenImage.png">
<img id="valid" src="https://dl.dropboxusercontent.com/s/4e90e48s5vtmfbd/aaa.png">
相关文章:
- 在<页眉>标签
- 全局变量和全局对象的属性之间有什么区别吗
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JavaScript中的函数和对象之间没有区别吗?
- iframe正在添加标签,需要删除它们
- 在ember/handlers中使用value和valueBinding有什么区别
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- 如何自动调整标签的高度以适应内容
- Jquery标签插件粘贴问题
- Twitter引导程序Typeahead-Id&标签
- javascript函数的:和=之间的区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 普通(弹出式)Chrome 扩展程序与在开发者工具中添加标签页的扩展程序之间的区别
标签和新的Image().src有什么区别
- 咏叹调标签和咏叹调标签之间的区别
- DIV标签和HTML5元素之间应该使用什么以及有什么区别(部分,文章)
- 将javascript放在文件和脚本标签中有什么区别?
- 手风琴和标签的区别