美文网首页JavaScript学习笔记
原生JavaScript实现图片懒加载

原生JavaScript实现图片懒加载

作者: 小人物的秘密花园 | 来源:发表于2018-04-24 17:07 被阅读0次

原文地址

https://github.com/visugar/FrontEnd-examples/blob/master/07lazyLoading/index.html

实现思路

  1. 在img元素时,自定义一个属性data-src,用于存放图片的地址;
  2. 获取屏幕可视区域的尺寸;
  3. 获取元素到窗口边缘的距离;
  4. 判断元素时候再可视区域内,在则将data-src的值赋给src,否则,不执行其他操作;
    实质: 当图片在可视区域内时,才加载,否则不加载;

代码

HTML

 <div class="container">
        <ul>
              <li>
                <img class="lazy-img" src="" data-src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524570254234&di=0c347308302493f1485bd95b087fa35a&imgtype=0&src=http%3A%2F%2Fpic.qiantucdn.com%2F58pic%2F13%2F83%2F81%2F06v58PICTc7_1024.jpg" alt="图片加载失败">
            </li>
            <li>
                <img class="lazy-img" src="" data-src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524570254233&di=a3d423d02a0db6a84770ff7fe85f0a0b&imgtype=0&src=http%3A%2F%2Fpic.58pic.com%2F58pic%2F16%2F83%2F14%2F51d58PICZza_1024.jpg" alt="图片加载失败">
            </li>
            <li>
                <img class="lazy-img" src="" data-src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524570254233&di=fc02c4ffe92172193dab7f6e4c89ef57&imgtype=0&src=http%3A%2F%2Fimg.bimg.126.net%2Fphoto%2FQDstweS8mbD8B-_i5pdGnQ%3D%3D%2F5771925872429353698.jpg"
                    alt="图片加载失败">
            </li>
            <li>
                <img class="lazy-img" src="" data-src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524570254232&di=280eead6788c5397e5dc5182b3e9144b&imgtype=0&src=http%3A%2F%2Fpic.qiantucdn.com%2F58pic%2F19%2F22%2F13%2F5685525b2caf7_1024.jpg"
                    alt="图片加载失败">
            </li>
            <li>
                <img class="lazy-img" src="" data-src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524570254201&di=56fc27944a2ed878279008766a13de37&imgtype=0&src=http%3A%2F%2Fpic.qiantucdn.com%2F58pic%2F14%2F34%2F54%2F07S58PICv8P_1024.jpg" alt="图片加载失败">
            </li>
            <li>
                <img class="lazy-img" src="" data-src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524570254201&di=789fd4384b866e6e400d6424612aac23&imgtype=0&src=http%3A%2F%2Fimg.bimg.126.net%2Fphoto%2F52lPHDL1HDS7fySH-7pwjQ%3D%3D%2F5771925872429353701.jpg"
                    alt="图片加载失败">
            </li>
            <li>
                <img class="lazy-img" src="" data-src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524570254201&di=04eda0b71093d7336be3c0dc599a1760&imgtype=0&src=http%3A%2F%2Fpic.90sjimg.com%2Fback_pic%2Fu%2F00%2F00%2F95%2F36%2F55e9305941c16.jpg"
                    alt="图片加载失败">
            </li>
            <li>
                <img class="lazy-img" src="" data-src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524570254200&di=cf50429d92d4c82936240b6cfeeb464f&imgtype=0&src=http%3A%2F%2Fpic.58pic.com%2F58pic%2F13%2F77%2F17%2F16j58PICHq7_1024.jpg" alt="图片加载失败">
            </li>
        </ul>
    </div>

CSS

body {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
}

ul,
ul li {
    list-style: none;
}

ul {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
}

li {
    width: 100%;
    height: 100%;
}

img {
    display: block;
    width: 100%;
    height: 100%;
}

JS

//当页面加载或页面滚动或窗口大小改变时,调用懒加载初始化方法
window.onload = window.onresize = window.onscroll = function() {
    loazyLoad.init();
};
/**
 * 根据id获取DOM元素
 * 
 * @param {String} id 需要获取的元素的id
 */
function getId(id) {
    return document.getElementById(id);
}
/**
 * 根据样式名获取DOM元素
 * 
 * @param {String} cls 需要获取元素的样式名
 * @returns 
 */
function getEleByCls(cls) {
    return document.getElementsByClassName(cls);
}
// 懒加载
var loazyLoad = {
    // 屏幕可视窗口高度
    wh: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
    // 屏幕可视窗口宽度
    ww: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
    init: function() {
        var that = this;
        // 获取所有的图片
        var aImg = getEleByCls("lazy-img");
        for (var i = 0; i < aImg.length; i++) {
            if ((that.getClientRect(aImg[i]).top > 0 && that.getClientRect(aImg[i]).top < this.wh) || (that.getClientRect(aImg[i]).bottom > 0 && this.getClientRect(aImg[i]).bottom < that.wh)) {
                //如果图片出现在浏览器可视区域中则用img标签中自定义的data-src值去替src路径
                aImg[i].src = aImg[i].dataset.src;
            }
        }
    },
    // 获取元素到窗口边缘的距离
    getClientRect: function(target) {
        return {
            top: target.getBoundingClientRect().top,
            right: target.getBoundingClientRect().right,
            bottom: target.getBoundingClientRect().bottom,
            left: target.getBoundingClientRect().left
        };
    }
}

结果

相关文章

  • 图片懒加载

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

  • 原生JavaScript实现图片懒加载

    原文地址 https://github.com/visugar/FrontEnd-examples/blob/ma...

  • 原生JS实现图片懒加载

    (1) 图片距离文档顶部的高度: img.offsetTop(2) 返回窗口文档显示区的高度: window.in...

  • 原生JS实现图片懒加载

    最近接的项目终于接近尾声,这段时间一直没有造轮子,在实现设计图还原的途中,发现还是有一些技术需要掌握,难者不会,会...

  • 原生 JS 实现图片懒加载

    1、什么是懒加载? 懒加载就是延迟加载的意思,比如我们加载一个页面,这个页面很长很长,长到我们的浏览器可视区域装不...

  • 原生js实现图片懒加载

    用多了懒加载插件,尝试一下自己撸一个,顺便了解其中原理和实现方法吧。 什么是懒加载 懒加载其实就是延迟加载,是一种...

  • 图片懒加载的原理

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

  • Javascript渐进式jpeg

    前言 之前写过一篇文章30行Javascript代码实现图片懒加载,基于这个类,我们可以做其他事情: 加载中的动画...

  • Javascript图片懒加载

    原理 一开始将img标签的src设置为一张默认图片,将真实的图片地址放在data-src上,监听滚动事件,当图片进...

  • JavaScript - 图片懒加载

    一. 为什么需要图片懒加载? 每一张图片都需要一个http请求获取src,如果首页有大量图片,加载时间会变长,用户...

网友评论

    本文标题:原生JavaScript实现图片懒加载

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