jQuery DOMready 页面加载事件 研究
来源:互联网 发布:九阴绝学玄兵升级数据 编辑:程序博客网 时间:2024/05/22 13:21
jQuery中的ready事件原型,在这里提取出来便于理解,代码+注释 如下:
// 事件队列 var EventQueue = null; // 是否已经执行过了,只执行一次 var isFire = false; //添加ready事件 function addReadyEvent(fn){ if(!EventQueue) EventQueue = []; if(document.readyState == 'complete'){ fn(); }else{ EventQueue.push(fn); } } // 触发ready事件 function fireReadyEvent(){ if(!isFire){ var fn,i=0; if(EventQueue){ while(fn = EventQueue[i]){ fn(); i++; } EventQueue = null; } isFire = true; } } // 绑定ready事件 function bindReady(){ if(document.addEventListener){ // 标准浏览器DOM加载完毕后执行队列,并卸载事件 document.addEventListener('DOMContentLoaded',unbindReady,false); // 确保会执行 window.addEventListener('load',fireReadyEvent,false); }else if(document.attachEvent){ // IE浏览器加载事件变化的时候执行unbindReady document.attachEvent('onreadystatechange',unbindReady); // 确保会执行 window.attachEvent('onload',fireReadyEvent); } var toplevel = false; // 是否顶层对象 try { toplevel = window.frameElement == null; } catch(e) {} if ( document.documentElement.doScroll && toplevel ) { // IE通过判断doScroll,在onreadystatechange = 'complete' 之前执行 doScrollCheck(); } } function doScrollCheck() { if ( isFire ) { return; } try { // IE下加载BODY后即可正常执行doScroll() document.documentElement.doScroll("left"); } catch( error ) { // 循环执行doScroll setTimeout( doScrollCheck, 1 ); return; } // doScroll成功后执行队列 fireReadyEvent(); } // 移除绑定事件并执行队列 function unbindReady(){ if(document.addEventListener){ //标准浏览器支持DOMContentLoaded事件 document.removeEventListener('DOMContentLoaded',unbindReady,false); fireReadyEvent(); }else if(document.attachEvent){ if(document.readyState === 'complete'){ // IE浏览器支持complete事件 document.detachEvent('onreadystatechange',unbindReady); fireReadyEvent(); } } } bindReady(); window.onload = function(){ console.log('LOAD加载完毕!'); } addReadyEvent(function(){ console.log('DOM加载完毕1!'); }); addReadyEvent(function(){ console.log('DOM加载完毕22!'); }) addReadyEvent(function(){ console.log('DOM加载完毕33!'); })
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- jQuery DOMready 页面加载事件 研究
- jquery 页面加载事件
- jQuery页面加载响应事件
- jQuery学习--jQuery页面加载完成事件
- 【jQuery】页面加载时触发ready()事件
- 【JQuery】页面加载时触发ready()事件
- JQuery页面加载完成后执行事件
- JavaScript及JQuery页面加载事件理解
- 【转】jquery页面加载完毕事件
- jQuery的domReady
- 通用domReady方法,类似于jquery
- 关于domReady事件的一点看法,domReady队列
- 原生JS页面初始化事件以及Jquery初始化页面加载事件
- domReady
- domReady机制探究及DOMContentLoaded研究
- jquery页面加载响应事件$(document).ready()与js页面加载响应事件window.onload()的区别
- 页面加载事件Page_Load
- 页面会发后加载事件
- C++ 重要修饰符
- jQuery:1.[1
- 项目管理_软件项目开发流程以及人员职责
- 水题 poj Y2K Accounting Bug
- 【Programming Pearls】查找一段文本或单词中的最长重复子串
- jQuery DOMready 页面加载事件 研究
- EXTJS4.0 MVC 模式下 表格grid的两种更新方式
- Android开发:andriod 源码下载
- 基于优化方法的机器人同步定位与地图创建(SLAM)后端(Back-end)设计技术收集
- Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件
- js模仿html5 placeholder
- C/C++ 结构体!
- (转)计算机视觉的一些测试数据集和源码站点
- YUV颜色空间