jquery的deferred对象实现判断页面中所有图片加载完成

判断页面中所有图片是否加载完成

对于图片是否加载完成,我们平时可以用监听图片load 方法来进行。今天主要介绍用jquery的deferred对象来进行判断。

关于jquery的deferred对象,是jquery的重点和难点。对于执行较长时间的函数,我们通常用deferred对象。关于jquery的deferred对象的API请看http://api.jquery.com/category/deferred-object/ 对于deferred对象,大家可以看下阮一峰写的一篇文章jQuery的deferred对象详解,

关于deferred对象,我在这里稍微介绍一下$.when().then()

 代码如下 复制代码

function successFunc(){ console.log( “success!” ); }
function failureFunc(){ console.log( “failure!” ); }

$.when(
$.ajax( "/main.php" ),
$.ajax( "/modules.php" ),
$.ajax( “/lists.php” )
).then( successFunc, failureFunc );

可以同时调用多个ajax,然后通过then来返回成功或者失败。

或者

 代码如下 复制代码
$.when($.ajax("test1.html"), $.ajax("test2.html"))
.done(function(){ alert("哈哈,成功了!"); })
.fail(function(){ alert("出错啦!"); });

我们回到正题来,用jquery的deferred对象实现判断页面中所有图片加载完成

 代码如下 复制代码

var defereds = []; //定义一个数组存放Deferred对象

$imgs.each(function() { //imgs循环所有图片
    var dfd = $.Deferred();// 新建一个deferred对象

    $(this).load(dfd.resolve());// 图片加载完成之后,改变deferred对象的执行状态
    defereds.push(dfd);//push到数组中
});
$.when.apply(null, defereds).done(function() {
    console.log('load compeleted');
});

因为 $.when 支持的参数是 $.when(dfd1, dfd2, dfd3, ...),所以我们这里使用了 apply 来接受数组参数。

上面提到了apply(),又引申到了 在JS中,call()方法和apply()方法

我在这里稍微介绍一下apply()

假如我们有prints函数:

 代码如下 复制代码
function prints(a,b,c,d){
        console.log(a+b+c+d);
    }
   function example(a,b,c,d){
       prints.apply(this,[a,b,c,d]);
   }
   example("1","sd","wq","wqe") //输出:1sdwqwqe

或者我们可以这么写:

 代码如下 复制代码

prints.apply(null,["前","端","博","客"]);//输出:前端博客

时间: 2024-12-03 16:08:00

jquery的deferred对象实现判断页面中所有图片加载完成的相关文章

jquery判断页面是否已经加载了jquery文件

注意此处说的动态加载js代码是针对如下这种情况的:  代码如下 复制代码 <script type="text/javascript" src="/echoJs.php"></script> <!--echoJs.php文件中的代码输出的是js代码--> 回归正题,那么如何判断当前网页是否加载jQuery了呢?在js代码中,如果加载了jquery则jQuery()函数将会被定义,因此只需检查jQuery()方法是否定义即可(这里不

!!!!!诸位师兄 请帮忙,如何判断 页面pdf文件加载完成!!!!!!!!!!

问题描述 我在用c#做一个网页浏览器.但是有一个问题加载某个网络数据库的pdf文件时,不知道该怎么判断是否加载完成.用过webbrowser.IsBusy.DocumentCompleted等等很多办法还是不管用诸位师兄帮个忙,我给您们鞠躬了!!!!还有加载完成的pdf文件如何自动保存(不要打开SaveDialog来手动保存,我要自动保存) 解决方案 解决方案二:up解决方案三:gz解决方案四:关注

页面中CSS加载方式的优化_网站应用

1.应该将 CSS 放置于结构的上方(一般放置于 head 元素内).CSS 是解释型语言,Firefox 和 IE 在等待 CSS 传输完成之前不会渲染任何东西.只有将 CSS 前置,才可在浏览器解析结构时,对页面进行渲染. This causes the blank white screen problem. The page is totally blank until the stylesheet at the bottom is downloaded, on the order of 

利用jQuery的deferred对象实现异步按顺序加载JS文件_jquery

前段时间看了阮一峰的jQuery的deferred对象详解一文,对jQuery中的deferred的用法了一些了解,今天看到园子里的一篇文章:关于重构JS前端框架的失败经验(顺便怀念那些死去的代码),于是把我之前写的一个利用jQuery的deferred异步按顺序加载JS文件方案分享出来,欢迎指正. 如果你现在对jQuery中的deferred还不了解,强烈建议你看一下阮一峰的jQuery的deferred对象详解一文. 加载JS文件的代码如下: 复制代码 代码如下: /* Loading Ja

几个优化WordPress中JavaScript加载体验的插件介绍_php技巧

WordPress 本身以及主题和插件通常需要加载一些 JavaScript 来实现某些特殊功能.为了最大限度地保证兼容性,不至于出现 JavaScript 失效的情况,所以一般在页头加载 JavaScript 文件.但是根据 Yahoo 开发者论坛的建议,加载 JavaScript 应该尽量在页尾以提高页面的显示(响应.渲染)速度.本文根据作者的使用经验介绍几个相关插件,并说明如何在某些特殊页面仍然在页头加载 JavaScript. 下面先简单介绍几个相关的优化 JavaScript 的 Wo

jQuery移动web开发中的页面初始化与加载事件_jquery

页面初始化事件(pagebeforecreate.pagecreate)Jquery Mobile会自动基于page"内的增强的约定自动初始化一些插件.例如:给一个input输入框约定了type=range属性会自动生成一个自定义滑动条.这些自动初始化的行为是受"page"插件控制的,它在执行前后部署部署事件,允许你在初始化前后操作页面,或者甚至自己提供初始化行为,禁止自动初始化.注以下的页面初始化事件在每个"page"只被触发一次,与每次页面在显示或者隐

jQuery的deferred对象详解

jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本. 每个版本都会引入一些新功能.今天我想介绍的,就是从jQuery 1.5.0版本开始引入的一个新功能----deferred对象. 这个功能很重要,未来将成为jQuery的核心方法,它彻底改变了如何在jQuery中使用ajax.为了实现它,jQuery的全部ajax代码都被改写了.但是,它比较抽象,初学者很难掌握,网上的教程也不多.所以,我把自己的学习笔记整理出来了,希望对大家有用. 本文不是初级教程,针对的读者是那些已经具备

js判断页面中是否有指定控件的简单实例

本篇文章主要是对js判断页面中是否有指定控件的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 if (document.getElementById('show_pic')!=null){document.getElementById('show_pic').src=this.value;} show_pic是页面中的一个图片控件,我们首先要保证这个控件存在于页面上,才能对其进行操作,不然JS就会出现错误,所以用这种方式进行了判断,我听网友说,JS中还有一个函数,可以判断对象是

jQuery通过deferred对象管理ajax异步_jquery

今天跟大家分享一个jquery中的对象-deferred.其实从jQuery 1.5.0版本开始引入的一个新功能----deferred对象.不过可能在实际开发过程中用到的并不多,所以没有太在意. 什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们都不是立即能得到结果的. 通常的做法是,为它们指定回调函数(callback).即事先规定,一旦它们运行结