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);}又是什么用途?请不吝赐教!
2. 给window.onload加上检查是为了尽快达成,如果页面全部加载完毕就调用,虽然有计时器,但多个保险总是没错的。
3. 如果timer有值,那代表之前有函数执行列表了,那么新的函数就push到列表里就行了