美文网首页IT@程序员猿媛让前端飞互联网科技
‘我’很"懒" ----- 实现图片懒加载

‘我’很"懒" ----- 实现图片懒加载

作者: 蓝海00 | 来源:发表于2019-06-02 16:39 被阅读8次

什么是懒加载

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

作用

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

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

原理

通过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();

相关文章

  • ‘我’很"懒" ----- 实现图片懒加载

    什么是懒加载 懒加载是一种 网页优化技术 作用 图片作为一种网页资源,请求时同样将占用网络资源,导致网页首屏的加载...

  • HTML特效代码大全

    来源于网络,仅供自己记录方便以后查看。 1)贴图:<img src="图片地址">...

  • 图片懒加载的原理

    懒加载思路及实现 实现懒加载有四个步骤,如下:1.加载loading图片2.判断哪些图片要加载【重点】3.隐形加载...

  • 图片懒加载

    前端实现图片懒加载(lazyload)的两种方式 原生JS实现最简单的图片懒加载 30行Javascript代码实...

  • AES/ECB/PKCS5Padding解密出现"

    iOS AES/ECB/PKCS5Padding解密的时候,出现" 解析 "是转义字符,相当于...

  • 项目优化

    图片懒加载,数据懒加载, 路由懒加载 1.图片懒加载原理 1.1 开始时 不设置src属性 1.2 图片在可视区域...

  • 懒加载和瀑布流

    一、简述图片懒加载的实现原理 图片懒加载 若一开始,页面上有许多的图片要加载,而如果同时加载这么多图片,会消耗性能...

  • mac中如何将文件隐藏、取消隐藏?

    一、mac中,以“."开头的文件,就是隐藏文件,如果更改文件名,前面加上<""/ ."">,这个文...

  • 实现图片懒加载

    项目中遇到一个公示信息列表,其中有图片预览, 因为窗口小、列表长、图片多,加载很慢,于是想把图片做成懒加载模式。 ...

  • 图片懒加载实现

    先将img标签的src链接设为同一张图片(比如空白图片),然后给img标签设置自定义属性(比如 data-src)...

网友评论

    本文标题:‘我’很"懒" ----- 实现图片懒加载

    本文链接:https://www.haomeiwen.com/subject/cfuxxctx.html