上一篇写了JavaScript权威指南里的一个whenReady的函数,该函数只是等文档解析完毕,图片加载完成,并且异步脚本也已经执行后才会执行传递给whenReady的函数,那么如何实现只等文档解析完成就能执行传递给whenReady的函数呢?看了$(document).ready()实现方法,主要包括DOMContentLoaded事件和doScroll检测法,实现的方法如下:
/* 传递函数给whenReady(),当文档解析完毕时且为操作准备就绪时,
* 函数将作为文档对象的方法调用
* DOMContentLoaded、readystatechange或load事件发生时会触发注册函数
* 一旦文档准备就绪,所有函数都将被调用,任何传递给whenReady()的函数都将立即调用
*/
var whenReady = (function() {
var funcs = []; // 当获得事件时,要运行的函数
var isReady = false; // 当触发事件处理程序时,切换到true
// 当文档准备就绪时,调用事件处理程序
function handler(e) {
// 如果已经运行过一次,只需要返回
if (isReady) return;
if (document.addEventListener || e.type == "load" || document.readystate == "complete") {
detach();
ready();
}
}
// Clean-up method for dom ready events
function detach() {
if (document.addEventListener) {
document.removeEventListener("DOMContentLoaded", handler, false);
window.addEventListener("load", handler, false)
} else