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


Posted in Javascript onAugust 10, 2015

对于图片的处理,例如幻灯片播放、缩放等,都是依赖于在所有图片完成之后再进行操作。

今天来看下如何判断所有的图片加载完成,而在加载完成之前可以使用 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的回调函数解决方案,它解决了如何处理耗时操作的问题, 对那些操作提供了更好的控制,以及统一的编程接口。

阮一峰有一篇文章是介绍 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 指南/入门基础
Nov 30 Javascript
表单元素事件 (Form Element Events)
Jul 17 Javascript
COM中获取JavaScript数组大小的代码
Nov 22 Javascript
jQuery客户端分页实例代码
Nov 18 Javascript
JS延时提示框实现方法详解
Nov 26 Javascript
全面了解JS中的匿名函数
Jun 29 Javascript
Angular中使用$watch监听object属性值的变化(详解)
Apr 24 Javascript
基于jquery实现多选下拉列表
Aug 02 jQuery
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
vue使用 better-scroll的参数和方法详解
Jan 25 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
Dec 09 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
May 18 Javascript
javascript实现连续赋值
Aug 10 #Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
Aug 10 #Javascript
js中的内部属性与delete操作符介绍
Aug 10 #Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
Aug 09 #Javascript
javascript中对变量类型的判断方法
Aug 09 #Javascript
jquery仿百度百科底部浮动导航特效
Aug 08 #Javascript
jquery实现页面虚拟键盘特效
Aug 08 #Javascript
You might like
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
python实现图片批量剪切示例
2014/03/25 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
技术副厂长岗位职责
2013/12/26 职场文书
校园文明倡议书
2014/05/16 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
副总经理岗位职责
2015/02/02 职场文书
限期整改通知书
2015/04/22 职场文书
赢在中国观后感
2015/06/02 职场文书
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技