展会信息港展会大全

提取jquery的ready()方法单独使用示例
来源:互联网   发布日期:2016-01-26 10:25:45   浏览:1775次  

导读:有一些功能需求,需要在DOM载入时马上执行一些函数,但又不愿意仅为了这一个需求而引入整个JQuery库,于是就把jQuery的方法提取出来,单独使用了大家可以使用windows onload事件,但onload在看来,就是页面上的东 ...

有一些功能需求,需要在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(){

//这里是逻辑代码

});

赞助本站

人工智能实验室

相关热词: ready jquery

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港