大家在写js代码的时候,有一点需要关注下:当浏览器在执行一段js代码的过程中,一般不会去更新渲染dom文档,而是在整段代码执行完毕的时候才去更新dom文档。浏览器这么实现,是为了尽可能提高性能。
但这种实现有时候会给我们带来一些意外的负面效果,特别是在js代码中使用我们自己开发的预览控件播放监控点实时画面的时候。但用户双击监控点的时候,这个双击事件的响应代码包括以下部分:
1、隐藏地图
2、绘制视频墙
3、绘制视频墙上的一个预览窗口
4、初始化视频控件
5、调用视频控件的StartPlay()方法,开始播放视频。
1、隐藏地图
2、绘制视频墙
3、绘制视频墙上的一个预览窗口
4、初始化视频控件
5、调用视频控件的StartPlay()方法,开始播放视频。
对浏览器来说,它可能在步骤5执行完之后再去更新和渲染dom文档。这样的话,我们看到的效果便是:浏览器首先在地图上以一种畸形的方式播放视频,然后过一会儿才绘制出视频墙和视频窗口,然后视频恢复正常。
为了让浏览器正确地按照代码顺序去渲染界面,我们可以在代码中假如强制渲染dom文档的代码,强制渲染dom的代码可以使用以下一些dom的属性:offsetTop, offsetLeft, offsetWidth, offsetHeight
scrollTop, scrollLeft, scrollWidth, scrollHeight
clientTop, clientLeft, clientWidth, clientHeight
js访问到以上dom属性的时候,它都会先渲染dom文档,再获得相关的属性。所以,就起到了强制渲染的作用
scrollTop, scrollLeft, scrollWidth, scrollHeight
clientTop, clientLeft, clientWidth, clientHeight
js访问到以上dom属性的时候,它都会先渲染dom文档,再获得相关的属性。所以,就起到了强制渲染的作用