如何实现加载DOM时执行js代码

有一些功能需求,需要在DOM载入时马上执行一些函数,但又不愿意仅为了这一个需求而引入整个JQuery库,于是就把jQuery的方法提取出来,单独使用了。

大家可以使用windows.onload事件,但onload在看来,就是页面上的东西(img,iframe等资源)全部都加载完毕后才能发生,如果页面内有大的图片的话,会在页面展现后好久时间后才执行。鸿运国际娱乐城

如果只需要对DOM进行操作,那么这时就没必要等到页面全部加载了。我们需要更快的方法。Firefox有DOMContentLoaded事件可以轻松解决,可惜的就是IE没有。

MSDN关于JSCRIPT的一个方法有段不起眼的话,当页面DOM未加载完成时,调用doScroll方法时,会产生异常。那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了。所以 对于Mozilla & Opera 浏览器,在dom树载入后有现成的 DOMContentLoaded 事件。对于Safari 浏览器,有document.onreadystatechange事件,当该触发时,如果 document.readyState=complete时,可视为dom树已经载入。

对于ie,当在iframe内时,同样有document.onreadystatechange事件,对于ie在非iframe内时,只有不断地通过能否执行doScroll判断dom是否加载完毕。

在本例中每间隔5毫秒尝试去执行 document.documentElement.doScroll(‘left‘)。在ie8下,貌视非iframe窗口也会有document.onreadystatechange事件,另外你也可以在构建自己的框架时使用此函数。

(function(){
	var isReady=false; //判断onDOMReady方法是否已经被执行过
	var readyList= [];//把需要执行的方法先暂存在这个数组里
	var timer;//定时器句柄

	ready=function(fn)
	{
		if (isReady )
			fn.call( document);
		else
			readyList.push( function() { return fn.call(this);});
		return this;
	}
	var onDOMReady=function(){
		for(var i=0;i< readyList.length;i++)
		{
			readyList[i].apply(document);
		}
		readyList = null;
	}
	var bindReady = function(evt)
	{
		if(isReady) return;
		isReady=true;
		onDOMReady.call(window);
		if(document.removeEventListener)
		{
			document.removeEventListener("DOMContentLoaded", bindReady, false);
		}
		else if(document.attachEvent)
		{
			document.detachEvent("onreadystatechange", bindReady);
			if(window == window.top){
				clearInterval(timer);
				timer = null;
			}
		}
	};
	if(document.addEventListener){
		document.addEventListener("DOMContentLoaded", bindReady, false);
	}
	else if(document.attachEvent)
	{
		document.attachEvent("onreadystatechange", function(){
			if((/loaded|complete/).test(document.readyState))
			bindReady();
		});
	if(window == window.top)
	{
		timer = setInterval(function(){
			try
			{
				isReady||document.documentElement.doScroll(‘left‘);//在IE下用能否执行doScroll判断 dom是否加载完毕
			}
			catch(e)
			{
				return;
			}
			bindReady();
		},5);
	}
	}
})();

使用方法如下:

ready(dosomething);//dosomething为已存在的函数
//也可以通过闭包来使用
ready(function(){
	//这里是逻辑代码
});
时间: 2024-12-08 03:07:00

如何实现加载DOM时执行js代码的相关文章

图片加载完毕后执行JS代码

$("#img").load(function(){...}); 这是jquery提供的一个方法,但是在IE中会有BUG,IE8不支持,IE9以上刷新后也不会执行,只有强制刷新才执行,所以不能使用这个jquery提供的方法 应该使用: 只能通过JS的onload来触发事件,当然触发的事件代码中可以使用jquery代码(但是,IE8也有BUG,普通刷新的时候图片从缓存读入,读入速度比代码更快,导致onload代码不能运行,解决方法看继续往下看) document.getElementBy

页面图片加载完毕以后执行JS代码

// 案例列表页左右div等高 $(".case-list-cont img").each(function(idx,ele){ if (ele.complete==true) { var rightAdvHeight = $(".case-list-cont").find(".right-div").height(); var leftAdvHeight = $(".case-list-cont").find(".

判断iframe加载完成、用于当ifame加载完成时执行一些操作

window.frames["iframec"].addEventListener( "load", function(){ window.frames["iframec"].setFormValue(obj);//iframe加载完成时的操作 }); IE iframe.attachEvent("onreadystatechange", function(){ //此事件在内容没有被载入时候也会被触发,所以我们要判断状态 /

DOM加载完毕之后执行js

方法一: $(document).ready(function(){ alert('页面加载完成后,我被加载出来了!') }); 方法二: $(function(){ alert('页面加载完成后,我被加载出来了!') }); 注:‘ 方法二 ’是‘ 方法一 ’的简写! 方法三: window.onload = function(){ alert('页面加载完成后,我被加载出来了!') }; 原文地址:https://www.cnblogs.com/Salicejy/p/10944417.htm

head.js让网站并行加载但顺序执行JS

http://headjs.com/ 并行加载JS,但是执行的时候却按顺序执行,提高网站速度 <script src="js/head.min.js"></script> <script type="text/javascript"> head.js("js/jquery-1.6.1.min.js","js/jquery.validate.min.js","js/my_valida

Android中使用WebView, WebChromeClient和WebViewClient加载网页 (能够执行js)

Android中使用WebView, WebChromeClient和WebViewClient加载网页 在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android 中提供了其很好的支持,下面是一个例子程序,先帖: 1 2 3 4 <?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android="http://schemas.android.com

在css加载完毕后执行后续代码

最近在写项目的framework,写个JQueryMessageBox的类,以使用jquery ui中的dialog()来显示消息框,为了使方法方便调用,便加入了自动判断页面是否加入了ui.js和ui.css,代码如下: [javascript] view plaincopyprint? //如果没有包含ui.js,则引用 if ($('script[src$=""jquery-ui-1.8.11.custom.min.js""]').length == 0) {{

当滚动条滚动到页面底部自动加载增加内容的js代码

这篇文章主要介绍了如何使用javscript实现滚动条滚动到页面底部自动加载增加页面内容,需要的朋友可以参考下..1,注册页面滚动事件,window.onscroll = function(){ }; 2,相关获取页面高度.滚动条位置.文档高度的函数: 复制代码 代码如下://获取滚动条当前的位置 function getScrollTop() { var scrollTop = 0; if (document.documentElement && document.documentEle

利用Promise实现数据多个请求加载完成时执行某个方法

在实际开发中常常有些业务的数据是来自多个接口的,因为ajax是异步,这样就导致我们需要判断是否请求到了数据然后在做其他的逻辑,在Promise没有出现之前,通常我们的解决方法是,第一粗暴的改异步为同步,但这样会造成阻塞,异步好像又失去了意义,第二也就是大家常用的解决办法用回调既一个异步执行完成后在执行下一个请求,这样看比第一种要好太多了,但是问题又来了,延迟延迟延迟,请求越多最后的那个请求延迟就会越严重,而且这样请求多了之后逻辑就会变得很乱...痛苦不堪,还好es6带来的Promise正好能解决