写在前面
今天碰到一个诉求,网页性能太慢,需要优化首屏加载速度。网页由10个视频资源,加10个图片资源构成,所有资源在同一时间加载(真不是我写的,我不接这个锅)。
立马想到的方案是,延迟加载,通过判断元素中心点的位置,来赋予src属性。同时要保证,视频超出视窗一半及暂停,反之则自动开始播放。毫无疑问,监听scroll事件来做了,scroll搭配setTimeout也还行,节流,功能也能实现。但是我觉得可以更好,一顿骚气搜索以后找到一个api Intersection observer,简直了,百分百契合我的诉求。
调试过程
1 |
|
1 | var option ={ |
IntersectionObserverEntry的详细解释可以点击链接去到MDN查看
IntersectionObserver其他方法
- disconnect 使
IntersectionObserver对象停止监听工作 - takeRecords 返回所有观察目标的
IntersectionObserverEntry对象数组 - unobserver 使
IntersectionObserver停止监听特定目标元素。小结
以往的方法都是监听scroll再结合[getBoundingClientRect](https://developer.mozilla.org/zh-CN/docs/Web/API/Element/getBoundingClientRect),这个新的api可以省去很多东西,性能方面,肯定是比scroll监听要好,如果实现了你的目的,没有后续的,可以直接停止监听。