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);}又是什么用途?请不吝赐教!
解决方案 »
- 将asp代码写成js嵌入后不执行结果
- 急!!!
- 在线编辑器我们应该以什么来衡量好坏?
- 请问如何用Javascript实现分页。谢谢!(急)
- 发现:position:absolute可有效提高页面运行速度?
- 当滑鼠拉滚动条令主页面上下滚动的时候,一个浮动窗口一直挂在屏幕的固定位置,或自动漂到指定位置,如何整?
- 一个关于动态改变select的option的问题!
- 我在网页上放了一按钮
- 请教诸位大虾:如何在JavaScript或VbScript中操作本地文件?
- 高手帮忙,搞不懂的问题!(在网页中使用ActiveX控件,并用VBScript读取本机文件)
- 如何在myeclipse嵌入java文件
- 在非IE浏览器中,带下滑线的变量如何访问
2. 给window.onload加上检查是为了尽快达成,如果页面全部加载完毕就调用,虽然有计时器,但多个保险总是没错的。
3. 如果timer有值,那代表之前有函数执行列表了,那么新的函数就push到列表里就行了