前端实现图片懒加载、vue实现图片懒加载

前言:在我们的项目中如果一个页面有很多的图片,而且后端接口一次都给我们返回出来了,我们要是直接一次渲染上去会增加页面的请求负担,对页面的加载造成很大的一个负载。

什么叫懒加载?原理是什么?懒加载也叫按需加载

因为图片的加载都是由src引起的,当你对img标签的src进行赋值时浏览器会去请求图片资源,基于这个,可以利用html5的属性data-xxx来保存图片路径,当我们需要加载图片时才将data-xxx的值赋予src,就能实现图片的按需加载,也就是懒加载了;


我们来看下面两张gif不同效果

  • 这个是没用到懒加载直接把接口里的图片全部渲染上去的

前端实现图片懒加载、vue实现图片懒加载_第1张图片

  • 这个是用到懒加载方法的首次只加载屏幕看的到的几个,然后滑动到即将出来的区域时再加载


说下jquery跟vue的懒加载的使用方法

  1. jquery:(注意看代码注释哈)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../utils/jquery-3.2.1.min.js"></script> //先引入jquery文件
<script src="../utils//jquery.lazyload.min.js"></script> //在引入lazyload文件
<script>
    $.ajax({
     
        url: 'https://api.it120.cc/small4/shop/goods/list',
        type: 'get',
        dataType: 'json',
        success: function (res) {
     
            console.log(res.data);
            $.each(res.data, function (index, item) {
     
                $('.box ul').append(`<li><img data-original="${item.pic}" src="./loading" alt="">
                <p>${
     item.name}</p></li>`)
                //我们来说明几点:
                //1.data-original="" 这个属性是规定好的必须要用original定义不能随便写哈,不然不起作用;
                //2.data-original="这里写真实路径"   而src="这里可以写一个loading图片,也可以不写"
            })
			$('.box ul li img').lazyload(); //这个lazyload()方法很重要别忘了加
        },
        error: function (err) {
     
            console.log(err)
        }
    })
</script>
<style>
    * {
     
        margin: 0;
        padding: 0;
        list-style: none;
        box-sizing: border-box;
    }

    h1 {
     
        text-align: center;
    }

    .box {
     
        width: 100%;
    }

    .box ul {
     
        width: 100%;
        display: flex;
        justify-content: space-between;
        flex-wrap: wrap;
    }

    .box ul li {
     
        width: 50%;
        text-align: center;
    }

    .box ul li img {
     
        display: block;
        margin: 0 auto 20px;
        width: 180px;
        height: 300px;

    }

    .box ul li p {
     
        font-size: 16px;
        padding-bottom: 20px;
    }
</style>

<body>
    <div class="box">
        <h1>图片懒加载</h1>
        <ul>

        </ul>
    </div>
</body>

</html>

附:jquery_lazyload下载地址


  1. 现在说下vue的使用方法:
//npm install vue-lazyload --save-dev 安装插件

//然后在main.js引入和使用
import VueLazyload from 'vue-lazyload'

Vue.use(VueLazyload,{
     
	loading:require('image/loading.png') //这里引入的是加载时的loading图
})

//最后修改图片显示方式为懒加载(将 :src 属性直接改为v-lazy)
<img v-lazy="{
     {item.pic}}">

一个简单的图片懒加载就完成啦…


end~~~

如有错误或观点不一致的请评论留言共同讨论,本人前端小白一枚,根据自己实际项目遇到的问题进行总结分享,谢谢大家的阅读!

你可能感兴趣的:(html5,前端,大前端,vue,jquery)