提取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 相关文章推荐
Jquery 快速构建可拖曳的购物车DragDrop
Nov 30 Javascript
使用 Node.js 做 Function Test实现方法
Oct 25 Javascript
JS对象与json字符串格式转换实例
Oct 28 Javascript
详解JavaScript中的构造器Constructor模式
Jan 14 Javascript
浅析vue component 组件使用
Mar 06 Javascript
旺旺在线客服代码 旺旺客服代码生成器
Jan 09 Javascript
javascript中数组的常用算法深入分析
Mar 12 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 Javascript
npm的lock机制解析
Jun 20 Javascript
分享一款超好用的JavaScript 打包压缩工具
Apr 26 Javascript
JS实现简易贪吃蛇游戏
Aug 24 Javascript
Vue js with语句原理及用法解析
Sep 03 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
PHP的全局错误处理详解
2016/04/25 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
Javascript倒计时代码
2010/08/12 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
Python中最大递归深度值的探讨
2019/03/05 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
追悼会子女答谢词
2014/01/28 职场文书
请假条怎么写
2014/04/10 职场文书
公司募捐倡议书
2014/05/14 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
毕业横幅标语
2014/10/08 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
毕业生对母校寄语
2015/02/26 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
Python词云的正确实现方法实例
2021/05/08 Python