如何监测DOM对象已加载完成
来源:互联网 发布:淘宝美工常用软件 编辑:程序博客网 时间:2024/04/29 10:58
在第三方插件的使用过程中,我们经常需要DOM在加载完成后执行一些操作,如果插件提供了这样的事件接口,那一切都较为简单,但在大部分的情况下,要么是设计者没有考虑到这样的问题,或者没有设计这样的接口,那这时应该怎么办呢?
小组成员经常犯的一个错误是利用if判断,如下:
let dom = document.getElementById('yiifaa')// dom加载完成后执行操作if(dom) { // 执行dom加载完成后的操作,例如echart的初始化操作 echart.init('yiifaa')}
但是显然,上面的代码只能保证执行的操作不会出错,并不会保证操作一定会执行(dom没加载完成),并且操作永远也得不到执行的机会。
也许你会说,为什么不采用while?如果真那样,那么恭喜你,你的程序死循环了,如下:
let dom = document.getElementById('yiifaa')// dom没加载完成,一直循环判断while(!dom) { continue;}// 执行dom加载完成后的操作,例如echart的初始化操作echart.init('yiifaa')
为什么呢?因为浏览器是单线程执行,而“while(!dom)”一直占着主线程,所以dom永远得不到机会加载到浏览器中。
正确的解决办法是充分利用浏览器的队列特性,如下:
// 声明定时器var timer = null// 检查dom是否执行完成function check() { let dom = document.getElementById('yiifaa') if(dom) { // 执行dom加载完成后的操作,例如echart的初始化操作 echart.init('yiifaa') // 清除定时器 if(!timer) { clearTimeout(timer) } } else { // 自我调用 timer = setTimeout(check, 0) }}// 首次执行check()
结论
在HTML 5中,已经有更好的替代方案-MutationObserver,基于事件触发,效率高,监测的类型不仅多,而且易于使用。
阅读全文
0 0
- 如何监测DOM对象已加载完成
- 如何写一个DOM加载完成的执行行数
- 认识DOM和DOM加载过程以及如何让DOM加载完成后再执行js脚本文件
- 认识DOM和DOM加载过程以及如何让DOM加载完成后再执行js脚本文件
- 【转】js判断dom元素加载完成
- 如何判断脚本加载完成
- 如何判断脚本加载完成
- 如何判断脚本加载完成
- 如何判断脚本加载完成
- 如何判断页面加载完成
- 如何判断网页加载完成
- 如何判断脚本加载完成
- 如何判断脚本加载完成
- 如何判断脚本加载完成
- 线程server如何做?已完成
- 如何在java对象里访问Spring中已加载的property内容
- js 判断dom元素加载完成_仅作为参考
- 原生JS实现DOM加载完成马上执行JS代码
- visual studio 编译中的小问题
- 深入Spring Cloud源码设计-基础篇
- Android---------底部图标与Fragment的联动
- JAVA
- Apache 配置及错误处理
- 如何监测DOM对象已加载完成
- CRC校验算法
- 第一个博客
- 算法竞赛入门经典 UVa1585
- 并发基础_3_并发_线程
- 对实拍和三维结合在maya里处理的一点想法
- bootstarp 之 简单表格$(function () { console.log(); //1.初始化Table var oTable = new TableInit(
- 初始Java
- java static关键字