‘我’才"懒"得加载呢 —– 实现图片懒加载

作者 : 开心源码 本文共2329个字,预计阅读时间需要6分钟 发布时间: 2022-05-13 共192人阅读

什么是懒加载

懒加载是一种 网页优化技术

作用

图片作为一种网页资源,请求时同样将占用网络资源,导致网页首屏的加载时间被拉长

假如一次性将网页的所有图片资源加载,会同时间出现大量的图片请求。而懒加载,则是将图片的加载,从原价的一口气加载变成按需加载的模式,减少同时间发起的资源请求,加快页面打开的速度,优化客户体验。

原理

通过JavaScript脚本,使图片仅在当前可视区域的视窗内出现时才加载该图片。达到减少首屏初次请求图片资源的次数的技术就称为图片懒加载

https://lanhai1.github.io/archives/ 个人博客

思路

  • 首先获取图片元素 保存在一个数组中 方便后面渲染至页面

  • 封装函数 => 判断该图片能否可以进行加载

  • 封装函数 => 获取图片与窗口的信息
  • 相比较 window的可视高度 能否 大于等于 图片相对于视窗的top值
  • 返回比较值

  • 封装函数 => 加载图片 参数1:元素 参数2:数组索引值
  • 获取自己设置属性(元素存放src的属性)
  • 元素赋值正确的src
  • 从数组中删除已经渲染了的图片

  • 封装函数 => 滚动事件
  • 为浏览器注册滚动时间 监测能否继续懒加载

  • 封装函数 => 初始化
  • 调用 能否加载图片函数
  • 调用 滚动事件函数

typescript代码

// 图片懒加载类class LazyLoads {    imglist: Array<Element>;    // 构造器    constructor(public el: string) {        // 获取图片元素 追加至数组        this.imglist = Array.from(document.querySelectorAll(el)); // 需使用懒加载的图片集合    }    // 判断该图片能否可以加载    canILoad = () => {        // 循环遍历数组        for (let i = this.imglist.length; i--;) {            this.getBound(this.imglist[i]) && this.loadImage(this.imglist[i], i);        }    }    // 获取图片与窗口的信息    getBound = (el: Element): boolean => {        // 获取元素相对于视窗的位置        let bound = el.getBoundingClientRect();        // 获取window可视高度        let clientHeight = window.innerHeight;        // 判断能否需要加载数据        return (bound.top <= clientHeight);    }    // 加载图片    loadImage = (el, index: number) => {        // 获取自己设置属性        let src = el.getAttribute('data-lanhai');        // 赋值        el.src = src;        // 删除已经渲染了的图片        this.imglist.splice(index, 1);    }    getScroll = () => {        // 为浏览器注册滚动时间 监测能否继续懒加载        window.addEventListener('scroll', () => {            this.imglist.length && this.canILoad();        });    }    // 初始化    init = () => {        this.canILoad();        this.getScroll();    }}// 实例化对象,参数则是需要使用懒加载的图片let start = new LazyLoads('img')// 初始化start.init()

编译后 JavaScript代码

// 图片懒加载类var LazyLoads = /** @class */ (function () {    // 构造器    function LazyLoads(el) {        var _this = this;        this.el = el;        // 判断能否该图片能否可以加载        this.canILoad = function () {            // 循环遍历数组            for (var i = _this.imglist.length; i--;) {                _this.getBound(_this.imglist[i]) && _this.loadImage(_this.imglist[i], i);            }        };        // 获取图片与窗口的信息        this.getBound = function (el) {            // 获取元素相对于视窗的位置            var bound = el.getBoundingClientRect();            // 获取window可视高度            var clientHeight = window.innerHeight;            // 判断能否需要加载数据            return (bound.top <= clientHeight);        };        // 加载图片        this.loadImage = function (el, index) {            // 获取自己设置属性            var src = el.getAttribute('data-lanhai');            // 赋值            el.src = src;            // 删除已经渲染了的图片            _this.imglist.splice(index, 1);        };        this.getScroll = function () {            // 为浏览器注册滚动时间 监测能否继续懒加载            window.addEventListener('scroll', function () {                _this.imglist.length && _this.canILoad();            });        };        // 初始化        this.init = function () {            _this.canILoad();            _this.getScroll();        };        // 获取图片元素 追加至数组        this.imglist = Array.from(document.querySelectorAll(el)); // 需使用懒加载的图片集合    }    return LazyLoads;}());// 实例化对象,参数则是需要使用懒加载的图片var start = new LazyLoads('img');// 初始化start.init();

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » ‘我’才"懒"得加载呢 —– 实现图片懒加载

发表回复