【经验总结】跪求指导:如何判断图片是否加载完成

群里某筒子问了下,如何判断一张图片已经完成,把想到的可能的情况整理了下

一、一般情况下

1)图片静态页面标签<img />创建



<img src = 'http://www.baidu.com/img/baidu_sylogo1.gif' onload='onloadHandler(this)' />

2)图片通过脚本动态创建

1 var img = document.createElement('img');
2 img.onload = function(){
3   alert('img loaded, img.src = ' + this.src);
4 };
5 img.onload = onloadHandler;

二、

假设页面原本有这么张静态图片,但没有通过行内脚本的绑定onloadHandler,如下代码所示:(有可能开发GG很痛恨行内脚本)

<img src="http://www.baidu.com/img/baidu_sylogo1.gif" id="pic" />

<!-- 假设此处有很多很多很多的资源要加载 -->

<script>

function $(id) { return document.getElementById(id);}
function onloadHandler(){

  alert('img loaded, img.src = ' + this.src);

};

var img = $('pic');
img.onload = onloadHandler;
img.src = "http://www.baidu.com/img/baidu_sylogo1.gif";

</script>

会有什么问题呢?有可能这段脚本运行之前,图片的onload事件已经触发了,于是,onloadHandler永远也不会执行 >_<

如何解决?—— img.complete

img.complete:如果图片之前已经加载完成,则为true,否则为false

<script>

function $(id) { return document.getElementById(id);}
function onloadHandler(){
  alert('img loaded, img.src = ' + this.src);
};

var img = $('pic');
img.src = "http://www.baidu.com/img/baidu_sylogo1.gif";
if(img.complete){
    onloadHandler.call(img);
}else{
    img.onload =onloadHandler;  //注意这里跟上面的区别,img.src赋值 与 绑定 onload事件的顺序相反
} </script>

 

写在后面:以上代码未经各大浏览器/版本 严格摧残验证,以下问题尚待验证,求不小心踩进来的大大指教!

1)是否所有主流浏览器均支持 img.complete(包括不同版本)

2)有没有可能在第一个分支判断 if(img.complete) 结束后,但未运行到 img.onload 这块代码,img的onload事件已经触发,导致onloadHandler不会执行

下面这段代码中间插了个耗时无比的逻辑,延迟onload的绑定,结果:onload处理方法还是执行了

var img = document.createElement('img');
img.src = 'http://im-img.qq.com/inc/images/new_header2/logo.gif';
if(img.complete){
    console.log('a');
    onloadHandler.call(img);
}else{
    var t1 = new Date() - 0;
    var div = document.createElement('div');
    for(var i=0; i<10000; i++){
        div.innerHTML = div.innerHTML + i;
    }
    document.body.appendChild(div);
    var t2 = new Date() - 0;
    console.log(t2 - t1);  //在chrome23.0里,6000++ms
    img.onload = onloadHandler;

    img.onload = onloadHandler;  //神奇的事情:onload事件触发,而且处理方法被执行了
}
时间: 2024-09-19 01:44:57

【经验总结】跪求指导:如何判断图片是否加载完成的相关文章

如何使用JavaScript判断图片是否加载完成

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src="http:/

JavaScript实现判断图片是否加载完成的3种方法整理

 这篇文章主要介绍了JavaScript实现判断图片是否加载完成的3种方法整理,本文讲解了onload方法.javascipt原生方法.jquery方法三种方法,需要的朋友可以参考下     有时候我们在前端开发工作中为了获取图片的信息,需要在图片加载完成后才可以正确的获取到图片的大小尺寸,并且执行相应的回调函数使图片产生某种显示效果.本文主要整理了几种常见的javascipt判断图片加载完成时的方法,并通过代码与实际应用相结合进行解释与说明. onload方法 通过向img标签添加onload

js 判断图片是否加载完以及实现图片的预下载

 创建一个Image对象,实现图片的预下载,如果图片已经存在于浏览器缓存,直接调用回调函数,使用onload事件可以判断图片是否加载完成 01 function loadImage(url, callback) {  02 var img = new Image(); //创建一个Image对象,实现图片的预下载  03 img.src = url;  04    05 if(img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数  06 callback.call

javascript判断图片是否加载完成的方法推荐_javascript技巧

load事件 <script type="text/javascript"> $('img').onload = function() { //code } </script> 优点:简单易用,不影响HTML代码. 缺点:只能指定一个元素,javascipt代码必须置于图片元素的下方 jquery方法 <script type="text/javascript"> $(function(){ $('.pic1').each(fun

js 判断图片是否加载完以及实现图片的预下载_javascript技巧

创建一个Image对象,实现图片的预下载,如果图片已经存在于浏览器缓存,直接调用回调函数,使用onload事件可以判断图片是否加载完成 function loadImage(url, callback) { var img = new Image(); //创建一个Image对象,实现图片的预下载 img.src = url; if(img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数 callback.call(img); return; // 直接返回,不用再

JS判断图片是否加载完成方法汇总(最新版)_javascript技巧

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.下面小编给大家整理了几种关于JS判断图片是否加载完成方法汇总,一起看看吧. 一.load事件 <script type="text/javascript"> $('img').onload = function() { //code } </script> 优点:简单易用,不影响HTML代码. 缺点:只能指定一个元素,javascipt代码必须置于图片元素的下方 二.jquery方法 <script

jQuery 判断图片是否加载完成方法汇总_jquery

对于图片的处理,例如幻灯片播放.缩放等,都是依赖于在所有图片完成之后再进行操作. 今天来看下如何判断所有的图片加载完成,而在加载完成之前可以使用 loading 的 gif 图表示正在加载中. 一.普通方法 监听 img 的 load 方法,每 load 一张图片比较一次.关键代码如下: var num = $img.length; $imgs.load(function() { num--; if (num > 0) { return; } console.log('load compelet

JavaScript怎么判断图片是否加载完成以便获取其尺寸_javascript技巧

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以,求方法? 一.load事件 复制代码 代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src=https://yunq

JavaScript判断图片是否加载完成的三种方式

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍.   一.load事件     <!DOCTYPE HTML> <html> <head>     <meta charset="utf-8">     <title>img - load event</title> </head> <body>     <img id="img1"

使用JavaScript判断图片是否加载完成的三种实现方式_javascript技巧

有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 复制代码 代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>img - load event</title> </head> <body> <img id="img1" src=&