提取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 相关文章推荐
自动更新作用
Oct 08 Javascript
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
Dec 30 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
开发中可能会用到的jQuery小技巧
Mar 07 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 Javascript
轻松实现javascript数据双向绑定
Nov 11 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
Angular实现可删除并计算总金额的购物车功能示例
Dec 26 Javascript
详解jenkins自动化部署vue
May 14 Javascript
js打开word文档预览操作示例【不是下载】
May 23 Javascript
js canvas实现星空连线背景特效
Nov 01 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
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
图解js图片轮播效果
2015/12/20 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
基于vue2实现上拉加载功能
2017/11/28 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
会话Bean的种类
2013/11/07 面试题
2014厂务公开实施方案
2014/02/17 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
交通事故被告答辩状
2015/05/22 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS