兼容低版本IE浏览器的DOMContentLoaded事件
用过jQuery的朋友一定对$(document).reay(function(){})不会陌生。
它的作用是当文档结构加载完毕就会触发事件,其实就是对DOMContentLoaded事件的封装。
下面是兼容低版本IE浏览器的DOMContentLoaded的事件,代码:
//保存domReady的事件队列
eventQueue = [];
//判断DOM是否加载完毕
isReady = false;
//判断DOMReady是否绑定
isBind = false;
/*执行domReady()
*
*@param {function}
*@execute 将事件处理程序压入事件队列,并绑定DOMContentLoaded
* 如果DOM加载已经完成,则立即执行
*@caller
*/
function domReady(fn){
if (isReady) {
fn.call(window);
}
else{
eventQueue.push(fn);
};
bindReady();
};
/*domReady事件绑定
*
*@param null
*@execute 现代浏览器通过addEvListener绑定DOMContentLoaded,包括ie9+
ie6-8通过判断doScroll判断DOM是否加载完毕
*@caller domReady()
*/
function bindReady(){
if (isReady) return;
if (isBind) return;
isBind = true;
if (window.addEventListener) {
document.addEventListener('DOMContentLoaded',execFn,false);
}
else if (window.attachEvent) {
doScroll();
};
};
/*doScroll判断ie6-8的DOM是否加载完成
*
*@param null
*@execute doScroll判断DOM是否加载完成
*@caller bindReady()
*/
function doScroll(){
try{
document.documentElement.doScroll('left');
}
catch(error){
return setTimeout(doScroll,20);
};
execFn();
};
/*执行事件队列
*
*@param null
*@execute 循环执行队列中的事件处理程序
*@caller bindReady()
*/
function execFn(){
if (!isReady) {
isReady = true;
for (var i = 0; i < eventQueue.length; i++) {
eventQueue[i].call(window);
};
eventQueue = [];
};
};
//js文件1
domReady(function(){
});
//js文件2
domReady(function(){
});
//注意,如果是异步加载的js就不要绑定domReady方法,不然函数不会执行,
//因为异步加载的js下载之前,DOMContentLoaded已经触发,addEventListener执行时已经监听不到了
声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至201542412@QQ.com举报,一经查实,本站将立刻删除。
相关推荐
-
JavaScript 事件委托或者事件代理介绍
本章节介绍一下标题标题中的事件委托这个概念和它的相关用法,代理也是一种叫法之一。其实从名称就可以看出事件委托其实就是自己的事情交给别人去干,下面就做一下介绍。下面是一个li元素列表:ul id=l
-
js兼容所有浏览器的pageX和pageY属性
标题中的两个属性具有一定的浏览器兼容性问题。不出所料,此兼容性问题是由I9以下浏览器导致的。但是由于考虑到低版本的I浏览器用户尚多,所以本章节介绍一下如何实现兼容所有浏览器的gX和gY
-
jquery实现的右键鼠标点击事件
jqury其实本身的事件机制就很完善了,包括了单击,双击,鼠标移入,鼠标移出等。但是却少了一个做事件。就是鼠标右击事件。当然大家也是直接用侦听鼠标按下事件,然后通过if来判断执行相应的函数。造成鼠标
-
兼容低版本IE浏览器的Object.create()方法
关于Objct.crt()方法的基本用法可以参阅Objct.crt()一章节。但是此方法对于低版本的浏览器无效,比如I9以下浏览器。下面就介绍一下代码实例,它实现了兼容效果。代码如下
-
js判断是否在微信内置浏览器中打开
代码实例如下// tru or flsvr flg = Wixini.onInWixin();Wixini的地址是github/zxli/Wixini。