前言
前段时间看到过一个面试题:
一个页面上有大量的图片(大型电商网站),加载很慢 ,你有哪些方法优化这些图片的加载,给用户更好的体验?
第一个想到的就是用图片懒加载,但学了这么久JS,在之前做项目时,许多库与插件都自带图片懒加载,就比如说Hexo框架搭建的博客,
但具体实现,经过一番思考,其实很简单
思路
这里我们使用H5的自定义属性:data-xxx 存储图片url
将所有图片的url存储在自定义属性中,使用JS监听滚动条事件,并判断每一个图片与浏览器窗口以及滚动条卷去的距离,当<img>
标签符合出现在视口的条件时,将存储在自定义属性中的url赋给其src
属性(为了简单起见,就不做节流处理了)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| $(function () { $('img').each(function () { if (isShow($(this)) && !isLoaded($(this))) { loadImg($(this)) } })
$(window).on('scroll',function () { $('img').each(function () { if (isShow($(this)) && !isLoaded($(this)) ){ loadImg($(this)); } }) }) function checkShow($img) { const scrollTop = $(window).scrollTop() const windowHeight = $(window).height() const offsetTop = $img.offset().top return offsetTop < (scrollTop + windowHeight) && offsetTop > scrollTop
} function isLoaded ($img) { return $img.attr('data-img-url') === $img.attr('src') } function loadImg ($img) { $img.attr('src',$img.attr('data-img-url')) } })
|