mass种子模块之domready

总结:由于IE6/7/8不支持DOMContentLoaded事件,虽然它支持onreadystatechange事件,但是readyState=complete几乎和onload事件一样,需要等页面中的外部资源加载完后才触发,想要尽快可采用doScroll检测法(仅在非iframe下有效)

 1 var turbo = turbo || {};
 2 var W3C = document.addEventListener ? true : false;
 3 var doc = document, html = document.documentElement;
 4 var readyList = [];
 5 turbo.ready = function(fn) {
 6     //不管是哪个分支,只要触发过一次ready事件readyList就会为null
 7     if (readyList) {
 8         readyList.push(fn);
 9     } else {
10         fn();
11     }
12 };
13 function fireReady() {
14     if (readyList && readyList.length) {
15         for (var i = 0, len = readyList.length; i < len; i++) {
16             var fn = readyList[i];
17             fn();
18         }
19     }
20     readyList = null;
21 }
22
23 function doScrollCheck() {
24     try {
25         html.doScroll(‘left‘);
26         fireReady();
27     } catch (e) {
28         setTimeout(doScrollCheck, 50);
29     }
30 }
31
32 var ready = W3C ? "DOMContentLoaded" : "readystatechange";
33 //由于firefox3.6不支持readyState,则在不支持readyState的时需手动赋值给它
34 if (!doc.readyState) {
35     //如果doc.body已存在则说明domcontentloaded了,将doc.readySate设置为complete
36     var readyState = doc.readySate = doc.body ? "complete" : "loading";
37 }
38
39 if (doc.readyState == ‘complete‘) {
40     fireReady();
41 } else {
42     $.bind(doc, ready, function() {
43         if (W3C || doc.readyState == ‘complete‘) {
44             fireReady();
45             //firefox3.6,我觉得这里设不设置都行,因为这里已经用不到了doc.readyState了
46             if (readyState) {
47                 doc.readyState = ‘complete‘;
48             }
49         }
50     })
51     //ie下使用doScroll,尽量提前触发ready,此方法只在非iframe下的页面有效
52     var top = false;
53     try {
54         top = doc.frameElement == null && doc.documentElement;
55     } catch (e) {}
56     if (top && top.doScroll) {
57         doScrollCheck();
58     }
59 }

有点看不懂mass里最后一段调用doScrollCheck的代码,故采用的jQuery的写法.

mass种子模块之domready,布布扣,bubuko.com

时间: 2025-01-06 20:34:39

mass种子模块之domready的相关文章

mass种子模块看完了

作者当然也不容易,要考虑各种兼容问题,要考虑效率问题(他真的考虑过吗,我表示强烈怀疑,貌似仅仅是风格上模仿其他源码) 相当无语. 本来我是知道的,代码 调试的过程中逐渐完善,逐渐与各种兼容问题和预想不到的bug打交道,原先严谨的结构都会渐渐腐烂,但是作者的结构,真的不是很严谨. 因为有些设计,完全是为兼容性而来的,所以有些即使没有理解,我也不去理解了,毕竟,我没有打算去维护这套代码. 我还是就这套代码的利弊进行一下总结吧. 1.命名一定要有意义,如果是临时起的无意义的名字,那么后期重构的时候要改

第二章 : 种子模块

种子模块也叫核心模块,是框架中最先执行的部分.即便像jQuery那样的单文件函数库,它的内部也分很多模块,必然有一些模块执行时在最前面立即执行,有一些模块只有用到才执行.有的模块可有可无,存在感比较弱,只有在特定的浏览器下才运行. 种子模块就是其中的先锋,它里边的方法不一定要求个个功能齐全,设计优良,但一定要极具扩展性,常用,稳定. 扩展性是指通过他们能给将其它模块包含进来:常用是指绝大多数的模块都能用到它们,防止做重复工作.稳定是指在版本迭代时不轻易被新方法替代. 参照许多框架和库的实现,我们

JavaScript架构设计 1.种子模块

1. 种子模块 种子模块也叫核心模块,是框架的最先执行的部分. 粽子模块包含功能:对象扩展,数组化,类型判定,简单的事件绑定与卸载,无冲突处理,模块加载与domReady.本章讲解以mass Framework的种子模块为范本. 1.1 命名空间 种子模块作为一个框架的最开始部分,除了负责辅建全局的基础设施外,你有没有想到给读者一个震撼的开场呢?俗话说,好的开头时成功的一半. 时下"霸主"jQuery 就有一个很好的开头--IIFE(立即调用函数表达式),一下子吸引住读者,让读者吃了一

第二课:种子模块2

1.类型的判断: js五种简单数据类型有:null,undefined,boolean,number,string. 还有复杂的数据类型:Object,Function,RegExp,Date,自定义的对象,比如:Person等. typeof一般用来判断boolean,number,string,instanceof一般用来判断对象类型.但它们都有缺陷.比如:firame里面的数组实例就不是父窗口的Array的实例,调用instanceof会返回false.(这题360校招时问过).typeo

第一课:种子模块

1.命名空间: js里面的命名空间就是使用对象的属性来扩展的.比如,用户定义一个A对象,A对象下面有B属性和C属性,同时B属性和C属性又是对象.因此A={B:{},C:{}},这时用户就可以在B对象和C对象中定义一样的方法,属性了.因此B和C就属于不同的命名空间.我们调用B,C对象里面的方法,就可以通过A.B.like(),A.C.like()调用了.当然A属于window对象中的属性. 但是有一种情况,比如:boke.jsp页面引入了jquery.js以及prototype.js(他们都会在w

第三章:模块加载系统(requirejs)

任何一门语言在大规模应用阶段,必然要经历拆分模块的过程.便于维护与团队协作,与java走的最近的dojo率先引入加载器,早期的加载器都是同步的,使用document.write与同步Ajax请求实现.后来dojo开始以JSONP的方法设计它的每个模块结构.以script节点为主体加载它的模块.这个就是目前主流的加载器方式. 不得不提的是,dojo的加载器与AMD规范的发明者都是james Burke,dojo加载器独立出来就是著名的require.本章将深入的理解加载器的原理. 1.AMD规范

迷你MVVM框架 avalonjs 入门教程(司徒正美)

迷你MVVM框架 avalonjs 入门教程 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定属性与动态模板 作用域绑定(ms-controller, ms-important) 模板绑定(ms-include) 数据填充(ms-text, ms-html) 类名切换(ms-class, ms-hover, ms-active) 事件绑定(ms-on,……) 显示绑定(ms-visible) 插入绑定(ms-if) 双工绑定(ms-duplex) 样式绑定(ms-css) 数据绑

JavaScript 框架设计 司徒正美 编著

第1章 种子模块 1.1 命名空间 1.2 对象扩展 1.3 数组化 1.4 类型的判定 1.5 主流框架引入的机制--domReady 1.6 无冲突处理 第2章 模块加载系统 2.1 AMD规范 2.2 加载器所在路径的探知 2.3 require方法 2.4 define方法 第3章 语言模块 3.1 字符串的扩展与修复 3.2 数组的扩展与修复 3.3 数值的扩展与修复 3.4 函数的扩展与修复 3.5 日期的扩展与修复 第4章 浏览器嗅探与特征侦测 4.1 判定浏览器 4.2 事件的支

前进的方向 没有方向就是蒙着眼睛的驴子原地踏步 一年经验混十年 说的真是太好了 必须要粘贴复制下来文章(司徒正美)

历时两年多,我的书终于付梓出版了.应各方面的要求,写软文一篇,隆重介绍一下此书对各位程序员的钱途有什么帮助及阅读顺序等疑问.作为国内第一本讲述前端框架构的书,它里面充斥着许多大家前所未闻的知识,这些知识有50%只见于github的issue,讲述各种隐秘的浏览器兼容性问题及各种神奇的修复方案,或者是某些危险但美丽的黑魔法,另外50%我深夜梦游般在外国某些大牛(不局限于英语,有日语,俄语,韩语等,不同的语言的人,受制了他们的语法结构,他们的思考回路是与我们不同的,给出的答案有时真的是拍案叫绝)的博