DOM Ready 原生写法

 1 /*!
 2  * contentloaded.js
 3  *
 4  * Author: Diego Perini (diego.perini at gmail.com)
 5  * Summary: cross-browser wrapper for DOMContentLoaded
 6  * Updated: 20101020
 7  * License: MIT
 8  * Version: 1.2
 9  *
10  * URL:
11  * http://javascript.nwbox.com/ContentLoaded/
12  * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE
13  *
14  */
15 
16 // @win window reference
17 // @fn function reference
18 
19 function contentLoaded(win, fn) {
20 
21     var done = false,
22         top = true,
23 
24         doc = win.document,
25         root = doc.documentElement,
26         modern = doc.addEventListener,
27 
28         add = modern ? 'addEventListener' : 'attachEvent',
29         rem = modern ? 'removeEventListener' : 'detachEvent',
30         pre = modern ? '' : 'on',
31 
32         init = function(e) {
33             if (e.type == 'readystatechange' && doc.readyState != 'complete') return;
34             (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false);
35             if (!done && (done = true)) fn.call(win, e.type || e);
36         },
37 
38         poll = function() {
39             try {
40                 root.doScroll('left');
41             } catch (e) {
42                 setTimeout(poll, 50);
43                 return;
44             }
45             init('poll');
46         };
47 
48     if (doc.readyState == 'complete') fn.call(win, 'lazy');
49     else {
50         if (!modern && root.doScroll) {
51             try {
52                 top = !win.frameElement;
53             } catch (e) {}
54             if (top) poll();
55         }
56         doc[add](pre + 'DOMContentLoaded', init, false);
57         doc[add](pre + 'readystatechange', init, false);
58         win[add](pre + 'load', init, false);
59     }
60 
61 }

 

https://raw.githubusercontent.com/dperini/ContentLoaded/master/src/contentloaded.js

posted @ 2020-06-11 11:17  xlsdg  阅读(132)  评论(0)    收藏  举报