domReady的实现

functionmyReady(cb){
	//判断是否是现代浏览器if(document.addEventListener){
		document.addEventListener("DOMContentLoaded", cb, false);
	}else{
		IEContentLoaded(cb);
	}

	functionIEContentLoaded(){
		vard = window.document;
		vardone = false; 
		//确保cb只执行一次varinit = function(){
			if(!done){
				done = true;
				cb();
			}
		}

		/*
			下面的一个关于doScroll的hack和一个对onreadystatechange事件的监听函数,看似在功能上一致,都是为了判断在老版本IE中DOM树是否加载完成并在加载完成后第一时间调用所要执行的函数,但是对于doScroll的hack是每间隔一段时间就调用自身重复判断,而在这间隔时间中DOM树可能就已经构造完毕,所以还需要加上个对于readyState
			的监听函数,通过这两段代码的不断轮询,就能尽可能的逼近DOM树刚刚构造完成的时间点从而提高执行效率。onreadystatechange事件是当在readyState属性发生改变之时触发的,所以一旦DOM树构造完毕,onreadystatechange事件将不再被触发,所以需要对于doScroll的hack
			来实现在DOM树构造完毕之后对于IEContentLoaded方法的正常执行。*/(function(){
			try{
				//DOM树未加载完时调用doScroll会抛出错误d.documentElement.doScroll('left');
			}catch(e){
				setTimeout(arguements.callee, 50);
				return;
			}
			init();
		})()
		//监听document的加载状态document.onreadystatechange = function(){
			if(document.readystate === 'complete'){
				//如果是在domReady之后调用的函数则立即执行document.onreadystatechange = null;
				init();
			}
		}
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值