load事件是在页面加载完毕后触发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function 
ready(fn){
    
if
(document.addEventListener) {
        
document.addEventListener(
'DOMContentLoaded'
function
() {
            
//注销事件, 避免反复触发
            
document.removeEventListener(
'DOMContentLoaded'
,arguments.callee, 
false
);
            
fn();            
//执行函数
        
}, 
false
);
    
}
else 
if
(document.attachEvent) {        
//IE
        
document.attachEvent(
'onreadystatechange'
function
() {
            
if
(document.readyState == 
'complete'
) {
                
document.detachEvent(
'onreadystatechange'
, arguments.callee);
                
fn();        
//函数执行
            
}
        
});
    
}
    
};

ready()加强版(自JavaScript权威指南)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
 
* 传递函数给whenReady()
 
* 当文档解析完毕且为操作准备就绪时,函数作为document的方法调用
 
*/
var 
whenReady = (
function
() {               
//这个函数返回whenReady()函数
    
var 
funcs = [];             
//当获得事件时,要运行的函数
    
var 
ready = 
false
;          
//当触发事件处理程序时,切换为true
      
    
//当文档就绪时,调用事件处理程序
    
function 
handler(e) {
        
if
(ready) 
return
;       
//确保事件处理程序只完整运行一次
          
        
//如果发生onreadystatechange事件,但其状态不是complete的话,那么文档尚未准备好
        
if
(e.type === 
'onreadystatechange' 
&& document.readyState !== 
'complete'
) {
            
return
;
        
}
          
        
//运行所有注册函数
        
//注意每次都要计算funcs.length
        
//以防这些函数的调用可能会导致注册更多的函数
        
for
(
var 
i=0; i<funcs.length; i++) {
            
funcs[i].call(document);
        
}
        
//事件处理函数完整执行,切换ready状态, 并移除所有函数
        
ready = 
true
;
        
funcs = 
null
;
    
}
    
//为接收到的任何事件注册处理程序
    
if
(document.addEventListener) {
        
document.addEventListener(
'DOMContentLoaded'
, handler, 
false
);
        
document.addEventListener(
'readystatechange'
, handler, 
false
);            
//IE9+
        
window.addEventListener(
'load'
, handler, 
false
);
    
}
else 
if
(document.attachEvent) {
        
document.attachEvent(
'onreadystatechange'
, handler);
        
window.attachEvent(
'onload'
, handler);
    
}
    
//返回whenReady()函数
    
return 
function 
whenReady(fn) {
        
if
(ready) { fn.call(document); }
        
else 
{ funcs.push(fn); }
    
}
})();
  
//--------------------- test -----
function 
t1() {
    
console.log(
't1'
);
}
function 
t2() {
    
console.log(
't2'
);
}
  
// t2-t1-t2
whenReady(t1);
t2();
whenReady(t2);

本文转自 爱笑嘚蛋蛋 51CTO博客,原文链接:http://blog.51cto.com/dd118/1965649,如需转载请自行联系原作者