zoukankan      html  css  js  c++  java
  • JS实现图片懒加载

    图片懒加载优势:

    1. 增强用户体验 
    2. 优化代码 
    3. 减少http的请求 
    4. 减少服务器端压力 
    5. 服务器的按需加载

    图片懒加载原理:

      先将图片的src设置为同一张图片或者不设置,同时给img标签设置一个特殊属性,例如:data-src用于存放图片的真实预览地址;若图片未进入可视区域时,展示同一张图片或者直接不展示图片,此时就不会发生http请求,当图片进入可视区域时,将data-src上的值赋给src,此时再发送http请求。

      关键:判断图片是否进入到可视区域(关键函数)

        页可见区域宽: document.body.clientWidth;
        网页可见区域高: document.body.clientHeight;
        网页可见区域宽: document.body.offsetWidth (包括边线的宽);
        网页可见区域高: document.body.offsetHeight (包括边线的宽);
        网页正文全文宽: document.body.scrollWidth;
        网页正文全文高: document.body.scrollHeight;
        网页被卷去的高: document.body.scrollTop;
        网页被卷去的左: document.body.scrollLeft;
        网页正文部分上: window.screenTop;
        网页正文部分左: window.screenLeft;
        屏幕分辨率的高: window.screen.height;
        屏幕分辨率的宽: window.screen.width;
        屏幕可用工作区高度: window.screen.availHeight;
        当前元素相对于其 offsetParent 元素的顶部的距离: HTMLElement.offsetTop;
        浏览器窗口的视口(viewport)高度(以像素为单位): window.innerHeight; (如果有水平滚动条,也包括滚动条高度)

    代码实现

    html部分

    <div>
        <img src="./img/1.jpg" data-src="./img/1.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/2.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/3.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/4.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/5.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/6.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/7.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/8.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/9.jpg" alt="">
        <img src="./img/1.jpg" data-src="./img/10.jpg" alt="">
      </div>

    js部分

    window.onload = () => {
          // 获取某节点与浏览器顶部的距离
          function getTop(e) {
            if (!e) return
            return e.offsetTop
          }
          let imgs = document.getElementsByTagName('img')
          function lazyLoading(imgs) {
            // 可是区域高度
            let innerHeight = window.innerHeight;
            // 滚动区域高度
            let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
            for (let i = 0; i < imgs.length; i++) {
              // 图片距离顶部的距离大于可视区域和滚动区域之和时加载
              if (scrollTop + innerHeight > getTop(imgs[i])) {
                imgs[i].src = imgs[i].getAttribute('data-src')
              }
            }
          }
          lazyLoading(imgs)
          window.onscroll = () => {
            lazyLoading(imgs)
          }
        }
  • 相关阅读:
    Chrome开发者工具中Elements(元素)断点的用途
    最简单的SAP云平台开发教程
    Java实现 LeetCode 495 提莫攻击
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 492 构造矩形
  • 原文地址:https://www.cnblogs.com/chenmeijiao/p/12055986.html
Copyright © 2011-2022 走看看