提取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 相关文章推荐
js nextSibling属性和previousSibling属性概述及使用注意
Feb 16 Javascript
jquery等宽输出文字插件使用介绍
Sep 18 Javascript
javascript获取元素离文档各边距离的方法
Feb 13 Javascript
jquery zTree异步加载简单实例讲解
Feb 25 Javascript
JavaScript中的事件委托及好处
Jul 12 Javascript
用iframe实现不刷新整个页面上传图片的实例
Nov 18 Javascript
Angularjs中数据绑定的实例详解
Aug 25 Javascript
VueJs 搭建Axios接口请求工具
Nov 20 Javascript
详解ES6 系列之异步处理实战
Oct 26 Javascript
js实现搜索栏效果
Nov 16 Javascript
express框架下使用session的方法
Jul 31 Javascript
javascript实现文字跑马灯效果
Jun 18 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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
python中logging库的使用总结
2017/10/18 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
总经理助理工作职责
2014/02/06 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
垂直极限观后感
2015/06/08 职场文书
婚宴父母致辞
2015/07/27 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python