知识点------图片懒加载实现方式

一、和懒加载相关的API

document.documentElement.clientHeight//获取屏幕可视区域的高度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VrnUxH0u-1586248674028)(https://pic2.zhimg.com/v2-d4efe96b77d0e0f07e7457574d162b2d_r.jpg “API解释”)]

element.offsetTop//获取元素相对于文档顶部的高度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4jnPHPjT-1586248674029)(https://pic3.zhimg.com/80/v2-7c07f86264b2c3eb576d7903dd35ea0e_720w.png “API解释”)]

document.documentElement.scrollTop//获取浏览器窗口顶部与文档顶部之间的距离,也就是滚动条滚动的距离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xnz6Z3g7-1586248674030)(https://pic3.zhimg.com/80/v2-fcc8364e69e9dbd1d5320b8f4e3d5836_720w.jpg “API解释”)]

二、还有一些人不知道怎么实现,我们还是用图来展示一下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XaZODdZo-1586248674031)(https://pic1.zhimg.com/80/v2-af1ab0c5f34e468e8647135c1f9f51e4_720w.jpg “懒加载原理”)]

三、判断公式:

当 offsetTop-scroolTop<clientHeight,则图片进入了可视区内,则被请求。

四、实现代码:


<ul>
  <li><img src="./imgs/default.png" data="./imgs/1.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/2.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/3.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/4.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/5.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/6.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/7.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/8.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/9.png" alt=""></li>
  <li><img src="./imgs/default.png" data="./imgs/10.png" alt=""></li>
</ul>
// https://blog.csdn.net/zgjxyszh/article/details/79535086
前言:兼容区别

可视窗口高度:
1. 对于Chrome、Firefox、Opera 以及 Safari: 
window.innerHeight – 浏览器窗口的内部高度 
window.innerWidth – 浏览器窗口的内部宽度 
2.  对于 Internet Explorer 8765,即IE8及以下: 
document.documentElement.clientHeight   document.documentElement.clientWidth 
或者 
document.body.clientHeight   document.body.clientWidth 

滚动条高度:
1、各浏览器下 scrollTop的差异 
IE6/7/8: 
对于没有doctype声明的页面里可以使用 document.body.scrollTop 来获取 scrollTop高度 ; 
对于有doctype声明的页面则可以使用 document.documentElement.scrollTop ; 
Safari: 
safari 比较特别,有自己获取scrollTop的函数 : window.pageYOffset ; 
Firefox: 
火狐等等相对标准些的浏览器就省心多了,直接用 document.documentElement.scrollTop ; 
2、获取scrollTop值 
完美的获取scrollTop 赋值短语 : 
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;


懒加载代码:
   let imgs = document.querySelectorAll('img')
    // 可视区高度
    let clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight

    function lazyLoad() {
        // 滚动卷去的高度
        let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
        for (let i = 0; i < imgs.length; i++) {
            // 得到图片顶部距离可视区顶部的距离
            let x = clientHeight + scrollTop - imgs[i].offsetTop
            // 图片在可视区内
            if (x > 0 && x < clientHeight + imgs[i].height) {
                imgs[i].src = imgs[i].getAttribute('data-src')
            }
        }
    }
    // 页面初始化时直接调用一下
    lazyLoad();
    // 页面滚动时调用函数
    window.onscroll = function () {
        setTimeout(lazyLoad, 300)
    }

五、第三方库:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝世唐门三哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值