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 functionfireReady() {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 functiondoScrollCheck() {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的写法.
转载于:https://www.cnblogs.com/jmtbai/p/3804199.html
mass种子模块之domready相关推荐
- 第二章 : 种子模块
种子模块也叫核心模块,是框架中最先执行的部分.即便像jQuery那样的单文件函数库,它的内部也分很多模块,必然有一些模块执行时在最前面立即执行,有一些模块只有用到才执行.有的模块可有可无,存在感比较弱 ...
- javascript框架设计之种子模块
javascript框架设计之种子模块 本文给大家介绍的是司徒正美的javascript框架设计的第二章种子模块的相关内容,算是一个小小的读后感,小伙伴们可以参考下. 种子模块也叫核心模块,是框架中最 ...
- JS框架设计之命名空间设计一种子模块
命名空间 1.种子模块作为一个框架的最开始,除了负责初始化框架的最基础部分. 2.种子模块作为框架的最开始,那么什么是种子框架的最开始呢?答案是IIFE(立即调用函数表达式); IIFE(立即调用函数 ...
- JS框架设计之对象类型判断一种子模块
Javascript有两套数据类型,一套是基础数据类型,一套是对象数据类型.基础数据类型包括5种基本数据类型,分别是null,bool,undefined,number,string,也叫简单数据类型 ...
- 迷你MVVM框架 avalonjs 入门教程
api大全 OniUI组件库 学习教程 视频教程: 地址1 地址2 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定 作用域绑定(ms-controller, ms-important ...
- 迷你MVVM框架 avalonjs 入门教程(司徒正美)
迷你MVVM框架 avalonjs 入门教程 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定属性与动态模板 作用域绑定(ms-controller, ms-important) 模板 ...
- 【JavaScript框架封装】公共框架的封装
版权声明:本文为博主原创文章,未经博主允许不得转载.更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/ ...
- 【JavaScript框架封装】使用Prototype给Array,String,Function对象的方法扩充
版权声明:本文为博主原创文章,未经博主允许不得转载.更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/ ...
- 前进的方向 没有方向就是蒙着眼睛的驴子原地踏步 一年经验混十年
copy的一篇文章. 知识树的来源. 知识有50%只见于github的issue,讲述各种隐秘的浏览器兼容性问题及各种神奇的修复方案,或者是某些危险但美丽的黑魔法,另外50%我深夜梦游般在外国某些大牛 ...
- 写得真励志,深度发展,成为不可替代的技术员
转自:偶的<javascript框架设计>终于出版 历时两年多,我的书终于付梓出版了.应各方面的要求,写软文一篇,隆重介绍一下此书对各位程序员的钱途有什么帮助及阅读顺序等疑问.作为国内第一 ...
最新文章
- (二)Docker中以redis.conf配置文件启动Redis
- MYSQL优化---hidba
- oracle 实现ID自增
- python列表常用方法实践_python 列表list 常用方法
- BAT程序员必备技能调研,你中了几招?
- C#图片动画效果(旋转360度)异步
- Luogu 2939 [USACO09FEB]改造路Revamping Trails Luogu 4568 [JLOI2011]飞行路线
- On the Robustness of Semantic Segmentation Models to Adversarial Attacks论文解读
- 计算机网络超详细笔记(四):介质访问控制子层
- 识别数学公式_新品独家发布(免费送码)丨极度公式 数学公式 OCR 识别编辑 LaTeX 公式软件...
- 暴风影音2009 Real插件无法下载安装问题解决
- 2021-04-26
- verilog全加器、全减器和乘法器及溢出判断
- Andriod获取本机ip地址
- 芭蕉树上第十四根芭蕉-- Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX
- thermal zone
- Java实现碧蓝航线连续作战
- Arduino与人体感应模块
- Linux下CGroup进行CPU内存等资源控制
- 按键精灵加密html,按键精灵HtmlCheck 选择/清除网页中的单选框或复选框 | 学步园...
热门文章
- ArcGIS学习总结(15)——影像空缺值蚕食填充批处理(Nibble)
- 利用HTML制作简易新闻网站的静态网页
- ENVI 不规则多边形shp裁剪后Memory灰色显示问题解决
- PHP实现完全二叉树
- 向贵人讨教,实现共赢
- android消息通知布局,Android Design
- 自定义日历控android,android 一个简单的自定义日历控件,让你掌控时间
- php 5.6 mysql con,最新版的程序,支持PHP5.6和MYSQL5.6的环境吗
- java线程条件变量_Java线程:条件变量 lock
- ping包优化版本python