Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready

Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready

还记不记得jQuery初始化函数jQuery.fn.init中有这样是一个分支

//document ready简便写法$(function(){…})
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
  所以$(fn)===$(document).ready(fn)。
  来看一下jQuery.fn.ready的源码
ready: function( fn ) {
// Add the callback
jQuery.ready.promise().done( fn );
return this;
}

  很明显在jQuery.ready.promise函数中设置了延时,当延时对象解决的时候执行fn函数。

  主要的处理流程:

  创建一个延时对象,并将文档准备好后的处理事件添加到该延时对象成功事件列表上。

jQuery.ready.promise = function( obj ) {
  if ( !readyList ) {
    readyList = jQuery.Deferred();
    …
  }
return readyList.promise( obj );
}

  添加文档准备状态的监听函数(jQuery.ready.promise函数片段)

//标准浏览器支持DOMContentLoaded事件
} else if ( document.addEventListener ) {
//绑定DOMContentLoaded事件和响应函数,响应函数会解决延时
document.addEventListener( “DOMContentLoaded”, completed, false );
//回退到window.onload事件绑定,所有的浏览器都支持
window.addEventListener( “load”, completed, false );
//如果是IE事件模型
} else {
//确保在onload之前执行延时,可能时间比较迟,但是对于iframes来说比较安全
document.attachEvent( “onreadystatechange”, completed );
//回退到window.onload事件绑定,所有的浏览器都支持
window.attachEvent( “onload”, completed );
//如果IE并且不是一个frame
//不断地检查,看是否该文件已准备就绪
var top = false;
try {
top = window.frameElement == null

© 版权声明

相关文章

暂无评论

none
暂无评论...