本篇文章小编给大家分享一下Jquery回调对象与延迟对象用法解析,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一、回调对象Callbacks
jQuery 1.7 版本中新增的 jQuery.Callbacks() 函数,返回一个多功能对象,此对象提供了一种强大的方法来管理回调列表。它能够增加、删除、触发、禁用回调函数。
1、定义和用法
$.Callbacks() 指一个多用途的回调函数列表对象,提供了一种强大的方法来管理回调函数列对。
提示:$.Callbacks 是在 jQuery 内部使用,如为 .ajax,$.Deferred 等组件提供基础功能的函数。它也可以用在类似功能的一些组件中,如自己开发的插件。
$(function () { function fn1( value ) { alert( value ); } function fn2( value ) { fn1("fn2 says: " + value); return false; } var callbacks = $.Callbacks(); callbacks.add( fn1 ); callbacks.fire( "foo!" );// 输出: foo! callbacks.add( fn2 ); callbacks.fire( "bar!" );// 先执行f1,再执行f2。输出: bar!, fn2 says: bar! })
2、支持的 Flags 参数
这个 flags 参数是 $.Callbacks() 的一个可选参数, 结构为一个用空格标记分隔的标志可选列表,用来改变回调列表中的行为 (比如. $.Callbacks( 'unique stopOnFalse' ))。
以下是可用的 flags:
once:确保这个回调列表只执行一次
memory:缓存上一次fire时的参数值,当add()添加回调函数时,直接用上一次的参数值立刻调用新加入的回调函数
unique:一个回调只会被添加一次,不会重复添加
stopOnFalse:某个回调函数返回false之后中断后面的回调函数
下面是 $.Callbacks( "unique" ) 的一个例子
$(function () { function fn1( value ) { alert( value ); } function fn2( value ) { fn1("fn2 says: " + value); return false; } var callbacks = $.Callbacks( "unique" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn1 ); // repeat addition callbacks.add( fn2 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); /*输出: foo bar fn2 says:bar foobar */ })
$.Callbacks() 支持一个列表设置多个flags(标识)而不仅仅是一个,有一个累积效应,类似"&&"。
下面是 $.Callbacks( 'unique memory' ) 的一个例子
$(function () { function fn1( value ) { alert( value ); return false; } function fn2( value ) { fn1( "fn2 says: " + value ); return false; } var callbacks = $.Callbacks( "unique memory" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn1 ); // repeat addition callbacks.add( fn2 ); callbacks.fire( "bar" ); callbacks.add( fn2 ); callbacks.fire( "baz" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); /*输出: foo fn2 says:foo bar fn2 says:bar baz fn2 says:baz foobar*/ })
3、方法清单:
callbacks.add():回调列表中添加一个回调或回调的集合。
callbacks.disable():禁用回调列表中的回调
callbacks.disabled():确定回调列表是否已被禁用。
callbacks.empty():从列表中删除所有的回调.
callbacks.fire():用给定的参数调用所有的回调
callbacks.fired():访问给定的上下文和参数列表中的所有回调。
callbacks.fireWith():访问给定的上下文和参数列表中的所有回调。
callbacks.has():确定列表中是否提供一个回调
callbacks.lock():锁定当前状态的回调列表。
callbacks.locked():确定回调列表是否已被锁定。
callbacks.remove():从回调列表中的删除一个回调或回调集合。
二、延迟对象:deferred
在jQuery 1.5中新增了 Deferred 延迟对象,它是通过调用 jQuery.Deferred() 方法来创建的可链接的实用对象。它可注册多个回调函数到回调列表,调用回调列表并且传递异步或同步功能的成功或失败的状态。
延迟对象是可链接的,类似于一个 jQuery 对象可链接的方式,区别于它有自己的方法。在创建一个 Deferred 对象之后,您可以使用以下任何方法,直接链接到通过调用一个或多个的方法创建或保存的对象。
1、$.Deferred()定义和用法
$.Deferred() 是一个构造函数,用来返回一个链式实用对象方法来注册多个回调,并且调用回调队列,传递任何同步或异步功能成功或失败的状态。
$.Deferred() 构造函数创建一个新的 Deferred(延迟)对象, jQuery.Deferred 可传递一个可选的函数,该函数在构造方法返回之前被调用并传递一个新的 Deferred 对象作为函数的第一个参数。例如被调用的函数可以使用 deferred.then()来附加回调函数。
一个 Deferred 对象开始于挂起状态。任何使用 deferred.then(), deferred.always(), deferred.done(), 或者 deferred.fail() 添加到这个对象的回调函数都是排队等待执行的。调用 deferred.resolve() 或 eferred.resolveWith() 转换延迟到解决状态后立即执行设置的 doneCallbacks 。调用 deferred.reject() 或 deferred.rejectWith() 转换延迟到拒绝状态后立即执行设置的 failCallbacks 。一旦对象已经进入了解决或拒绝状态,它保持该状态。回调仍然可以添加到已解决或已拒绝的 Deferred 对象——它们会立即执行。
设定两个延时时间是随机的定时器,分别用于解决(resolve)和拒绝(reject)延迟对象
$(function () { function asyncEvent(){ var dfd = new jQuery.Deferred(); // 在一个随机的时间间隔之后 Resolve (解决状态) setTimeout(function(){ dfd.resolve("欢呼"); }, Math.floor(400+Math.random()*2000)); // 在一个随机的时间间隔之后 reject (拒绝状态) setTimeout(function(){ dfd.reject("对不起"); }, Math.floor(400+Math.random()*2000)); // 每半秒显示一个"working..."消息 setTimeout(function working(){ if ( dfd.state() === "pending" ) { dfd.notify("working... "); setTimeout(working, 500); } }, 1); // 返回 Promise 对象,调用者不能改变延迟对象 return dfd.promise(); } // 为异步函数附加一个done, fail, 和 progress 处理程序 $.when( asyncEvent() ).then( function(status){ alert( status+', 事情进展顺利' ); }, function(status){ alert( status+', 这次你失败了' ); }, function(status){ $("body").append(status); } ); })
2、deferred.promise():
返回Deferred(延迟)的Promise对象。
方法允许一个异步函数阻止那些干涉其内部请求的进度(progress)或状态(status)的其它代码。
只包含 deferred 对象的一组方法,包括:done(),then(),fail(),isResolved(), isRejected(), always(), 这些方法只能观察一个 deferred 的状态,而无法更改 deferred 对象的内在状态。
deferred.promise()也可以接受一个 target 参数,此时传入的 target 将被赋予 Promise 的方法,并作为结果返回,而不是创建一个新对象。
deferred.promise( [target ] ) :使用目标参数
3、.promise():
返回一个 Promise 对象用来观察当某种类型的所有行动绑定到集合,排队与否还是已经完成。
.promise() 方法返回一个动态生成的 Promise,当绑定到集合中的所有特定动作(action)已经被加入或未被加入到队列中时,生成的 Promise 将被受理(resolve)。
type 的默认值是"fx" ,这意味着被受理(resolve)的 Promise 对象是在所有被选中元素的动画都完成时返回的。
如果提供 target 参数,.promise() 在该参数上添加方法,然后返回这个对象,而不是创建一个新的。它适用于在一个已经存在的对象上添加 Promise 行为的情况。
语法:.promise( [type ] [, target ] )
type:String类型 需要待观察队列类型。
target:PlainObject类型 将要绑定 promise 方法的对象。
在一个没有激活动画的集合上调用 .promise()
$(function () { var div = $( " " ); div.promise().done(function( arg1 ) { alert( this === div && arg1 === div );//弹出 "true" }); })
当所有的动画结束时(包括那些在动画回调函数和之后添加的回调函数中初始化的动画),受理(Resolve)返回的 Promise。
$(function () { $( "button" ).on( "click", function() { $( "p" ).append( "已开始..." ); $( "div" ).each(function( i ) { $( this ).fadeIn().fadeOut( 100 * ( i + 1 ) ); }); $( "div" ).promise().done(function() { $( "p" ).append( " 完成! " ); }); }); })
4、jQuery.when():
提供一种方法来执行一个或多个对象的回调函数, Deferred(延迟)对象通常表示异步事件。
5、方法清单:
deferred.progress():当Deferred(延迟)对象生成进度通知时,调用添加处理程序。
deferred.done():当Deferred(延迟)对象解决时,调用添加处理程序。
deferred.fail():当Deferred(延迟)对象拒绝时,调用添加处理程序。
deferred.always():当Deferred(延迟)对象解决或拒绝时,调用添加处理程序。
deferred.catch():当Deferred对象被拒绝(reject)时,调用添加的处理程序。
deferred.notify():根据给定的 args参数 调用Deferred(延迟)对象上进行中的回调 (progressCallbacks)。
deferred.notifyWith():根据给定的上下文(context)和args递延调用Deferred(延迟)对象上进行中的回调(progressCallbacks)。
deferred.resolve():解决Deferred(延迟)对象,并根据给定的args参数调用任何完成回调函数(doneCallbacks)。
deferred.resolveWith():解决Deferred(延迟)对象,并根据给定的 context和args参数调用任何完成回调函数(doneCallbacks)。
deferred.reject():拒绝Deferred(延迟)对象,并根据给定的args参数调用任何失败回调函数(failCallbacks)。
deferred.rejectWith():拒绝Deferred(延迟)对象,并根据给定的 context和args参数调用任何失败回调函数(failCallbacks)。
deferred.pipe():实用的方法来过滤 and/or 链Deferreds。
deferred.state():确定一个Deferred(延迟)对象的当前状态。
deferred.then():当Deferred(延迟)对象解决,拒绝或仍在进行中时,调用添加处理程序。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整