求解domReady( )函数
时间:2011-11-27
来源:互联网
function domReady(f) {
//假如DOM已经加载,马上执行函数
if(domReady.done) return f();
//假如我们已经增加一个函数
if(domReady.timer){
domReady.read.push(f);
}else{
//为页面加载完毕绑定一个时间,以防止他最先完成。
addEvent(window, 'load', isDOMReady);
//初始化待执行函数数组
domReady.ready=[f];
//尽可能快的检查DOM是否可用
domReady.timer=setInterval(isDOMReady,13);
}
}
function isDOMReady() {
//如果我们判断出DOM可用,忽略
if(domReady.done) return false;
//检查若干函数和元素是否可用
if(document&&document.getElementById&&document.getElementsByTagName&&document.body){
//如果可用,我们立即停止检查
clearInterval(domReady.timer);
domReady.timer=null;
//执行所有正在等待的函数
for(var i=0; i<domReady.ready.length;i++)
domReady.ready[i]();
//记录我们在此已经完成
domReady.ready=null;
domReady.done=true;
}
}
问题:
1、if(document&&document.getElementById&&document.getElementsByTagName&&document.body) document如果可用,是否意味着document.body也可用?为什么还要单独检查后者呢?document.getElementById&&document.getElementsByTagName是否是在检查浏览器的能力,是否支持DOM方式?
2、addEvent(window, 'load', isDOMReady);不明白这句代码的含义,为什么要防止他先执行呢?后面不是一直在通过setInterval调用这个函数吗?
3、domReady.timer这个是属性除了用于清除间断调用,在if(domReady.timer){domReady.read.push(f);}又是什么用途?
请不吝赐教!
//假如DOM已经加载,马上执行函数
if(domReady.done) return f();
//假如我们已经增加一个函数
if(domReady.timer){
domReady.read.push(f);
}else{
//为页面加载完毕绑定一个时间,以防止他最先完成。
addEvent(window, 'load', isDOMReady);
//初始化待执行函数数组
domReady.ready=[f];
//尽可能快的检查DOM是否可用
domReady.timer=setInterval(isDOMReady,13);
}
}
function isDOMReady() {
//如果我们判断出DOM可用,忽略
if(domReady.done) return false;
//检查若干函数和元素是否可用
if(document&&document.getElementById&&document.getElementsByTagName&&document.body){
//如果可用,我们立即停止检查
clearInterval(domReady.timer);
domReady.timer=null;
//执行所有正在等待的函数
for(var i=0; i<domReady.ready.length;i++)
domReady.ready[i]();
//记录我们在此已经完成
domReady.ready=null;
domReady.done=true;
}
}
问题:
1、if(document&&document.getElementById&&document.getElementsByTagName&&document.body) document如果可用,是否意味着document.body也可用?为什么还要单独检查后者呢?document.getElementById&&document.getElementsByTagName是否是在检查浏览器的能力,是否支持DOM方式?
2、addEvent(window, 'load', isDOMReady);不明白这句代码的含义,为什么要防止他先执行呢?后面不是一直在通过setInterval调用这个函数吗?
3、domReady.timer这个是属性除了用于清除间断调用,在if(domReady.timer){domReady.read.push(f);}又是什么用途?
请不吝赐教!
作者: shijuren 发布时间: 2011-11-27
1. document是js的重要属性之一,建议好好学习,document存在不一定代表document.body存在,body要到body标签加载完毕才会有效。 document.getElementById和document.getElementsByTagName都需要游览器加载完毕,或者加载DOM树的一部分才可以用,当然了,不支持DOM就肯定没用
2. 给window.onload加上检查是为了尽快达成,如果页面全部加载完毕就调用,虽然有计时器,但多个保险总是没错的。
3. 如果timer有值,那代表之前有函数执行列表了,那么新的函数就push到列表里就行了
2. 给window.onload加上检查是为了尽快达成,如果页面全部加载完毕就调用,虽然有计时器,但多个保险总是没错的。
3. 如果timer有值,那代表之前有函数执行列表了,那么新的函数就push到列表里就行了
作者: jim9_kabi 发布时间: 2011-11-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28