懒加载
开头
作为最常见的优化页面的一种手段,记录一下学习笔记
正文
什么是懒加载
- 也叫延迟加载,即让页面依赖的一些非关键资源,先不加载,在后期达到某些触发条件时,在加载
- 这里的关键资源指决定和影响当前访问页面的一些资源;非关键资源,比如针对页面某一部分的一些脚本、动态切换的样式等
目的
减少资源加载带来的响应时间过长,造成用户体验不好
具体表现
- 在页面滚动到某一部分,加载当前位置需要显示的图片和相关资源
- 面板切换,要切换时,在加载将要显示的资源
- 等等
实现
- 对上述第一种情况进行一个简单的效果实现
- 页面有3部分,每一部分都占满整个屏幕,显示一张图片
思路
- 对一部分的图片不作处理
- 对剩下的2部分的图片的src不先不设置,把资源路径添加到data-src里
- 对整个文档添加一个滚动事件
- 每次滚动事件的函数触发时,获取当前文档滚动的height
- 当滚动的位置达到我们指定的值后,通过js给图片的src添加资源路径
用到的api
- data-***:不具有表现意义的一个属性,用于给dom添加自定的片段数据
- 滚动事件:mousewheel
- 获取文档滚动的高度:scrollTop
代码
1 |
|
- 打开chrome调试工具,查看network,发现页面一开始只加载了a图片
- 当滚动到指定位置后,才开始加载需要后面的资源
关于获取dom的大小、位置
提到了scrollTop,顺带总结一下这几个api的区别
clientHeight、clientWidth
- 获取dom的height(width)+padding(如果没设置,为0)
- 这里还有一个同样功能的api:getClientRects
- 两者的区别:前者对小数取整;后者保留
clientTop、clientLeft
- 获取dom的border-top(left)
scrollHeight、scrollWidth
- 获取dom的整个内容长度(比如div的height是100px,并设置了overflow-y:scroll后,div内部内容的height长度)
- 后者同理
scrollTop、scrollLeft
- 获取dom滑动出可视区域的部分的height(width)
offsetheight、offsetWidth
- 获取dom的height(width)+padding+border
offsetTop、offsetLeft
- 获取目标dom离最近的已定位元素的margintop(left)
- 这里还有个api,offsetParent用来获取离目标元素最近的已定位的元素
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!