需求:
根据页面滚动,当图片进入视野,就开始加载,否则不加载任何图片。
//页面加载完成时先调用一下,首屏内的图片。
loadImg();
document.addEventListener('scroll', function(e) {
//跟着滚动,继续加载剩下的图片
loadImg()
})
function loadImg(){
//slice可以将类数组转化成数组对象
[].slice.call(document.querySelectorAll('[data-src]')).forEach(function(item) {
// 判断元素是否已经进入视野
if (item.getBoundingClientRect().y<=innerHeight) {
//设置src
item.src = item.getAttribute('data-src');
//删除data-src属性,可以减少querySelectorAll的查询次数
item.removeAttribute('data-src');
}
})
}
<img data-src="简单高效实现一个按需加载图片的逻辑_/xxx.png">
代码简单,却很通用,很实用。方便扩展
热门评论:
-
沙漠西葫芦 2019-8-2 7:06 回复:
你这个代码存在多个问题:
1、 滚动事件频率太快,未控制节流
2、ios机型你没有考虑滑动后的惯性移动并不会触发scroll,必须增加mouseover,并且在滚动过程中ios禁止任何DOM操作。
3、图片需要给定默认高度。
4、代码报错,innerHeight未定义
5、想法没问题,进入视野加载图片,在pc端适用较多。移动端还是以预加载为主。
以上1,4是我疑问。为了给大家提供更多方便,你能提供一下帮助吗?
以上:有时候提问题谁都会,难得是解决问题。不管方案多低级,只要能解决实际问题,就是好方案,不是吗。
jsoncode 2019-8-9 3:51 回复:沙漠西葫芦
我查询到的innerHeight兼容性,非常好:参考https://developer.mozilla.org/zh-CN/docs/Web/API/Window/innerHeight
如果还是报错,你可以使用window.innerHeight再试一下