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();
};
// 兼容ie
s.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);