mass种子模块之domready
2024-08-26 07:42:28
总结:由于IE6/7/8不支持DOMContentLoaded事件,虽然它支持onreadystatechange事件,但是readyState=complete几乎和onload事件一样,需要等页面中的外部资源加载完后才触发,想要尽快可采用doScroll检测法(仅在非iframe下有效)
var turbo = turbo || {};
var W3C = document.addEventListener ? true : false;
var doc = document, html = document.documentElement;
var readyList = [];
turbo.ready = function(fn) {
//不管是哪个分支,只要触发过一次ready事件readyList就会为null
if (readyList) {
readyList.push(fn);
} else {
fn();
}
};
function fireReady() {
if (readyList && readyList.length) {
for (var i = 0, len = readyList.length; i < len; i++) {
var fn = readyList[i];
fn();
}
}
readyList = null;
} function doScrollCheck() {
try {
html.doScroll('left');
fireReady();
} catch (e) {
setTimeout(doScrollCheck, 50);
}
} var ready = W3C ? "DOMContentLoaded" : "readystatechange";
//由于firefox3.6不支持readyState,则在不支持readyState的时需手动赋值给它
if (!doc.readyState) {
//如果doc.body已存在则说明domcontentloaded了,将doc.readySate设置为complete
var readyState = doc.readySate = doc.body ? "complete" : "loading";
} if (doc.readyState == 'complete') {
fireReady();
} else {
$.bind(doc, ready, function() {
if (W3C || doc.readyState == 'complete') {
fireReady();
//firefox3.6,我觉得这里设不设置都行,因为这里已经用不到了doc.readyState了
if (readyState) {
doc.readyState = 'complete';
}
}
})
//ie下使用doScroll,尽量提前触发ready,此方法只在非iframe下的页面有效
var top = false;
try {
top = doc.frameElement == null && doc.documentElement;
} catch (e) {}
if (top && top.doScroll) {
doScrollCheck();
}
}
有点看不懂mass里最后一段调用doScrollCheck的代码,故采用的jQuery的写法.
最新文章
- 移动端前端框架UI库(Frozen UI、WeUI、SUI Mobile)
- 从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0
- hdu 2645 find the nearest station
- jquery功能实现总结
- 浅谈JS中的闭包
- BZOJ 2626 JZPFAR(KD-tree)
- jenkins 多选框
- JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】
- Jenkins项目部署使用教程-----02视图及项目添加
- js canvas获取图片base64 dataUrl
- 认证登录装饰器与form组件的使用
- HDU 4576 Robot
- C#——LINQ语句
- Spring 注解原理(三)@Qualifier @Value
- hao643.com劫持(修改快捷方式跳转至hao123.com)
- Linux系统中切换用户身份su与sudo的用法与实例
- WebForm Response和Request以及Cookie
- Linux期中架构 全网备份案例
- unity之定制脚本模板
- STM32 HAL库学习系列第5篇 定时器TIM---编码器接口模式配置
热门文章
- hdu 4864 Task---2014 Multi-University Training Contest 1
- HTML5游戏开发引擎Pixi.js完全入门手册(二)元素对象属性解析
- 开源项目:底部动作条(BottomSheet)
- shell文字过滤程序(十一):paste命令
- C语言字符串函数大全
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一
- Spring框架和MVC原理
- Python开发环境的搭建(win7)
- 从头开始学JavaScript (十三)——Date类型
- AJAX及其跨域的主要解决方法