DOM 加载事件
监听 DOM 文档是否加载成功,在使用 jquery 可以使用 $(document).ready(function(){})
来实现,用 js 来实现要怎么做?
DOMContentLoaded
当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded
事件被触发,而无需等待样式表、图像和 iframe 的完成加载。不同于 window 的 load 事件,会等所有的样式,图片,子框架都加载完才会触发
document.addEventListener('DOMContentLoaded', function () { console.log('document loaded');});
onreadystatechange
在 document 绑定 onreadystatechange
事件可以在对应的 dom 加载过程中触发相应的回调,通过 document.readyState
来获取状态,有三种状态
- loading:文档正在加载中
- interactive:文档加载完,但是其他资源(图片,样式)还在加载中,等同于上面的 DOMContentLoaded
- complete:文档和其他资源都加载完了
document.onreadystatechange = function () { console.log(document.readyState);};
对 ie 低版本还有一个利用定时器监听(document.documentElement || document.body)的 doScroll('left')方法
JS 加载事件
动态加载 js 文件,判断 js 是否加载完成,例如
var s = document.createElement('script');s.src = 'https://cdn.bootcss.com/require.js/2.3.5/require.min.js';s.onload = function () { JSLoaded();};// 兼容ies.onreadystatechange = function () { if (s.readyState === 'complete') { JSLoaded(); }};document.getElementsByTagName('head')[0].appendChild(s);
CSS 加载事件
动态加载 css 文件,判断 css 文件是否加载完成,可以类似跟上面一样,绑定 onload 事件或者监听 readyState
状态,还可以通过 document.styleSheets
数组的长度来判断
var cssnum = document.styleSheets.length;var l = document.createElement('link');l.href = 'https://cdn.bootcss.com/bootstrap/4.1.1/css/bootstrap-grid.css';l.rel = 'stylesheet';document.getElementsByTagName('head')[0].appendChild(l);var cssLoadTimer = setInterval(function () { if (document.styleSheets.length > cssnum) { // 执行css load事件 CSSLoaded(); clearInterval(cssLoadTimer); }}, 10);