提取jquery的ready()方法单独使用示例


Posted in Javascript onMarch 25, 2014

大家可以使用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(){
 //这里是逻辑代码
});
Javascript 相关文章推荐
JavaScript Scoping and Hoisting 翻译
Jul 03 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
Dec 16 Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 Javascript
jquery获得keycode的示例代码
Dec 30 Javascript
详解JavaScript中shift()方法的使用
Jun 09 Javascript
跟我学习javascript的严格模式
Nov 16 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
Mar 07 Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 Javascript
详解用函数式编程对JavaScript进行断舍离
Sep 18 Javascript
详解vue 兼容IE报错解决方案
Dec 29 Javascript
小程序实现日历左右滑动效果
Oct 21 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
Oct 14 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
Mar 25 #Javascript
jquery解析xml字符串示例分享
Mar 25 #Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 #Javascript
jquery选择器原理介绍($()使用方法)
Mar 25 #Javascript
Jquery插件编写简明教程
Mar 25 #Javascript
jquery自动填充勾选框即把勾选框打上true
Mar 24 #Javascript
jquery默认校验规则整理
Mar 24 #Javascript
You might like
PHP的几个常用数字判断函数代码
2012/04/24 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
js定时器实例分享
2016/12/20 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
python中文乱码的解决方法
2013/11/04 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
英国电信商店:BT Shop
2019/12/17 全球购物
企业总经理岗位职责
2014/02/13 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
拓展策划方案
2014/06/03 职场文书
党员演讲稿
2014/09/04 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书