对于图片的处理,例如幻灯片播放、缩放等,都是依赖于在所有图片完成之后再进行操作。
今天来看下如何判断所有的图片加载完成,而在加载完成之前可以使用 loading 的 gif 图表示正在加载中。
一、普通方法
监听 img 的 load 方法,每 load 一张图片比较一次。关键代码如下:
var num = $img.length; $imgs.load(function() { num--; if (num > 0) { return; } console.log('load compeleted'); }
二、使用 jQuery 中的 Deferred 对象
Deferred 对象是从 jQuery 1.5.0 版本开始引入的一个新功能,详细介绍可以见 官方文档。
简单的说,Deferred 对象就是jQuery的回调函数html" target="_blank">解决方案,它解决了如何处理耗时操作的问题, 对那些操作提供了更好的控制,以及统一的编程接口。
阮一峰有一篇文章是介绍 Deferred 对象的,写的比较详细,对于入门比较有用。
jQuery的deferred对象详解
在这里,我们用到了:
deferred.resolve(): Resolve a Deferred object and call any doneCallbacks with the given args.
deferred.when(): Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.
deferred.done(): Add handlers to be called when the Deferred object is resolved.
关键代码:
var defereds = []; $imgs.each(function() { var dfd = $.Deferred(); $(this).load(dfd.resolve); defereds.push(dfd); }); $.when.apply(null, defereds).done(function() { console.log('load compeleted'); });
基本思路:
每加载完一张图片 resolve(),when() 当所有的 Deferred 完成便执行 done()。
注: 因为 $.when 支持的参数是 $.when(dfd1, dfd2, dfd3, ...),所以我们这里使用了 apply 来接受数组参数。
complete判断图片是否加载了
感谢谷歌,找到了好使的方法,简单用法就是:
qim=new Image();//新建一个图片; qim.src=$preload;//图片地址是你准备要加载的地址; if(qim.complete){ $("#cxNfloor").html($filetoload);//qim.complete表示这个图片是否加载完毕了 }
后来又发现一个方法
$("").load(function(){...});
其中选择器是图片的id或class,function里面的方法就是回调函数,在图片加载完成后执行,但是我试验了很多,压根儿不是那么回事,正确的解决方法是:
//jquery的方式 $("#imageId").load(function(){ alert("加载完成!"); });
有朋友说使用js是最好的,方法如下
document.getElementById("img2").onload=function(){}
在网上找到一段代码
例子
function loadImage(url, callback) { var img = new Image(); //创建一个Image对象,实现图片的预下载 img.src = url; if(img.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数 callback.call(img); return; // 直接返回,不用再处理onload事件 } img.onload = function () { //图片下载完毕时异步调用callback函数。 callback.call(img);//将回调函数的this替换为Image对象 }; };
下面是针对多个image的加载判断。
var imgdefereds=[]; $('img').each(function(){ var dfd=$.Deferred(); $(this).bind('load',function(){ dfd.resolve(); }).bind('error',function(){ //图片加载错误,加入错误处理 // dfd.resolve(); }) if(this.complete) setTimeout(function(){ dfd.resolve(); },1000); imgdefereds.push(dfd); }) $.when.apply(null,imgdefereds).done(function(){ callback(); });
使用这种方法就可以避免window.onload的不足,不过代码稍显复杂 在性能方面比起window.onload经强很多。
本文向大家介绍JavaScript & jQuery完美判断图片是否加载完毕,包括了JavaScript & jQuery完美判断图片是否加载完毕的使用技巧和注意事项,需要的朋友参考一下 众所周知,常见瀑布流当鼠标滚动到浏览器底部的时候,就会发起一个ajax的请求。在服务端生成item列表后,通过 js append到相应的div里边。 看起来很简单的样子,关键问题就出在图片的加载问题上,图片一般
本文向大家介绍JavaScript判断图片是否已经加载完毕的方法汇总,包括了JavaScript判断图片是否已经加载完毕的方法汇总的使用技巧和注意事项,需要的朋友参考一下 在网上有很多关于判断图片是否已经加载完毕的文章,但是有的浏览器并不适合,下面小编给大家分享一些有关JavaScript判断图片是否已经加载完毕方法汇总,具体内容如下所示: 一.onload事件 通过监听图片的onload事件,可
本文向大家介绍js 判断图片是否加载完以及实现图片的预下载,包括了js 判断图片是否加载完以及实现图片的预下载的使用技巧和注意事项,需要的朋友参考一下 创建一个Image对象,实现图片的预下载,如果图片已经存在于浏览器缓存,直接调用回调函数,使用onload事件可以判断图片是否加载完成
本文向大家介绍jQuery中判断对象是否存在的方法汇总,包括了jQuery中判断对象是否存在的方法汇总的使用技巧和注意事项,需要的朋友参考一下 如果是下面的 jQuery 代码判断一个对象是否存在,是不能用的。 因为 $(“#id”) 不管对象是否存在都会返回 object 。 正确使用判断对象是否存在应该用: 使用 jQuery 对象的属性 length 来判断,如果 > 0 就存在。 或者 或
本文向大家介绍jQuery图片加载失败替换默认图片方法汇总,包括了jQuery图片加载失败替换默认图片方法汇总的使用技巧和注意事项,需要的朋友参考一下 本文主要讨论页面中图片加载失败后替换默认图片的几种方式 重点来了:一定要记住error事件不冒泡。 相关的知识点:jquery的ready方法、$("img").error()、img的complete属性、插件imagesLoaded、事件委托、
本文向大家介绍jQuery判断对象是否存在的方法,包括了jQuery判断对象是否存在的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery判断对象是否存在的方法。分享给大家供大家参考。具体如下: 一、传统Javascript的写法 在jQuery中,var obj = $("#id")无论id这个控件是否存在,都是返回object,这样可就无法使用if(obj)来判断这个控件是