JS 实现页面加载完成判断

  1. 方案一:不能带参数,但可以多次调用。
    (function()
    {
    	var ie = !!(window.attachEvent && !window.opera);
    	var wk = /webkit\/(\d+)/i.test(navigator.userAgent) && (RegExp.$1 < 525);
    	var fn = [];
    	var run = function () { for (var i = 0; i < fn.length; i++) fn[i](); };
    	var d = document;
    	d.ready = function (f){
    		if (!ie && !wk && d.addEventListener) return d.addEventListener('DOMContentLoaded', f, false);
    		if (fn.push(f) > 1) return;
    		if (ie)
    		(function (){
    			try { d.documentElement.doScroll('left'); run(); }
    			catch (err) { setTimeout(arguments.callee, 0); }
    		})();
    		else if (wk)
    		var t = setInterval(function () {
    			if (/^(loaded|complete)$/.test(d.readyState))
    				clearInterval(t), run();
    		}, 0);
    	};
    })();
  2. 方案二:能带参数,但好像不支持多次调用。
    ~function()
    {
    	var FNArray=[];
    	var D = document;
    	window.onReady = function(fallBackFunction)
    	{
    		var argu=[];
    		for (var i=1,len=arguments.length; i<len; i++){
    			argu.push(arguments[i]);
    		}
    		var is_ie = !!(window.attachEvent && !window.opera);
    		if (window.readyBound) return fallBackFunction.apply(this,argu);
    		if(!is_ie) return fallBackFunction.apply(this,argu);
    		FNArray.push(fallBackFunction);
    		readyBound = true;
    		var ready = 0;
    		// Mozilla, Opera and webkit nightlies currently support this event
    		if (D.addEventListener)
    		{
    			// Use the handy event callback
    			D.addEventListener("DOMContentLoaded",
    			function(){
    				D.removeEventListener("DOMContentLoaded", arguments.callee, false);
    				if (ready) return;
    				ready = 1;
    				for (var i=0,len=FNArray.length; i<len; i++)
    				{
    					FNArray[i] ? FNArray[i].apply(this,argu) : 0;
    				}
    			},
    			false);
    		// If IE event model is used
    		}else if (D.attachEvent){
    			// ensure firing before onload,
    			// maybe late but safe also for iframes
    			D.attachEvent("onreadystatechange",
    			function(){
    				if (D.readyState === "complete")
    				{
    					D.detachEvent("onreadystatechange", arguments.callee);
    					if (ready) return;
    					ready = 1;
    					for (var i=0,len=FNArray.length; i<len; i++)
    					{
    						FNArray[i] ? FNArray[i].apply(this,argu) : 0;
    					}
    				}
    			});
    			// If IE and not an iframe
    			// continually check to see if the D is ready
    			if (D.documentElement.doScroll && window == window.top)(function(){
    				if (ready) return;
    				try{
    					// If IE is used, use the trick by Diego Perini
    					// http://javascript.nwbox.com/IEContentLoaded/
    					D.documentElement.doScroll("left");
    				}catch(error){
    					setTimeout(arguments.callee, 0);
    					return;
    				}
    				ready = 1;
    				for (var i=0,len=FNArray.length; i<len; i++){
    					FNArray[i] ? FNArray[i].apply(this,argu) : 0;
    				}
    			})();
    		}
    	};
    }();
  3. 方案三:放在页面的最后。
  4. 方案四:window.onload
    此方法是页面所有的资源包括图片等加载完成后才会执行,因此不推荐使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值