在大部分中,需要在树载入时马上执行一些函数,但又不愿意仅为了这一个需求而引入整个库,于是就把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')
另外要注意一点:PDF目录在ie8下,貌视非iframe窗口也会有document.onreadystatechange事件,另外你也可以在构建自己的框架时使用此函数
09 | readyList.push( function () { return fn.call( this );}); |
12 | var onDOMReady= function (){ |
13 | for ( var i=0;i<readyList.length;i++){ |
14 | readyList[i].apply(document); |
18 | var bindReady = function (evt){ |
21 | onDOMReady.call(window); |
22 | if (document.removeEventListener){ |
23 | document.removeEventListener( "DOMContentLoaded" , bindReady, false ); |
24 | } else if (document.attachEvent){ |
25 | document.detachEvent( "onreadystatechange" , bindReady); |
26 | if (window == window.top){ |
32 | if (document.addEventListener){ |
33 | document.addEventListener( "DOMContentLoaded" , bindReady, false ); |
34 | } else if (document.attachEvent){ |
35 | document.attachEvent( "onreadystatechange" , function (){ |
36 | if ((/loaded|complete/).test(document.readyState)) |
39 | if (window == window.top){ |
40 | timer = setInterval( function (){ |
42 | isReady||document.documentElement.doScroll( 'left' ); |
使用方法如下:
发表评论 取消回复