vue图片懒加载

268 阅读1分钟

一、前言

  • 懒加载(LazyLoad)一直是前端的优化方案之一。简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载。
  • 它的核心思想是:当用户想看页面某个区域时,再加载该区域的数据。这在一定程度上减轻了服务器端的压力,也加快了页面的呈现速度。
  • 懒加载多用于图片,因为它属于流量的大头。最典型的懒加载实现方案是先将需要懒加载的图片的src隐藏掉,这样图片就不会下载,然后在图片需要呈现给用户时再加上src属性。

二、安装插件

npm i vue-lazyload -S

三、main.js引入

//main.js引入vue懒加载
import VueLazyload from 'vue-lazyload'

//方法一:  没有页面加载中的图片和页面图片加载错误的图片显示
// Vue.use(VueLazyload)

//方法二:  显示页面图片加载中的图片和页面图片加载错误的图片
//引入待加载图片
const loadimage = require('./assets/logo.png')
const errorimage = require('./assets/logo.png')
//注册图片懒加载  
Vue.use(VueLazyload, {
  // preLoad: 1.3,
  error: loadimage,//图片错误的替换图片路径(可以使用变量存储)
  loading: errorimage,//正在加载的图片路径(可以使用变量存储)
  // attempt: 1
})

参数选项配置说明: image.png

四、页面使用

vue组件中使用

<template>
  <div class="box">
    <div class="cont" v-for="item, index in list" :key="index">
      <img v-lazy="item" />
    </div>
  </div>
</template>

<script>
export default {
  name: "home",
  data() {
    return {
      list: [require('../assets/夕阳.jpg'), require('../assets/沙滩.jpg'), require('../assets/湖泊.jpg'),
      require('../assets/雪山.jpg'), require('../assets/夕阳.jpg'), require('../assets/沙滩.jpg'), 
      require('../assets/湖泊.jpg'), require('../assets/雪山.jpg'),]
    };
  },
}
</script>

<style lang="scss" scoped>
.box {
  width: 400px;
  margin: 0 auto;

  img {
    width: 100%;
    height: 200px;
    display: block;
  }
}
</style>

个性化使用

<template>
  <div class="box">
    <!-- <div class="cont" v-for="item, index in list" :key="index">
      <img v-lazy="item" />
    </div> -->
    <div class="cont" v-lazy-container="{ selector: 'img', error: require('../assets/logo.png'), loading: require('../assets/logo.png') }">
      <img :data-src="require('../assets/夕阳.jpg')">
      <img :data-src="require('../assets/沙滩.jpg')">
      <img :data-src="require('../assets/湖泊.jpg')">
      <img :data-src="require('../assets/雪山.jpg')">
      <img :data-src="require('../assets/夕阳.jpg')">
      <img :data-src="require('../assets/沙滩.jpg')">
      <img :data-src="require('../assets/湖泊.jpg')">
      <img :data-src="require('../assets/雪山.jpg')">
    </div>
    <!-- 或 -->
    <div class="cont" v-lazy-container="{ selector: 'img'}">
      <img :data-src="require('../assets/夕阳.jpg')" :data-error="require('../assets/logo1.png')" :data-loading="require('../assets/logo.png')">
      <img :data-src="require('../assets/沙滩.jpg')" :data-error="require('../assets/logo8.png')" :data-loading="require('../assets/logo19.png')">
      <img :data-src="require('../assets/湖泊.jpg')" :data-error="require('../assets/logo.png')" :data-loading="require('../assets/logo8.png')">
      <img :data-src="require('../assets/雪山.jpg')" :data-error="require('../assets/logo13.png')" :data-loading="require('../assets/logo.png')">
      <img :data-src="require('../assets/夕阳.jpg')" :data-error="require('../assets/logo.png')" :data-loading="require('../assets/logo352.png')">
      <img :data-src="require('../assets/沙滩.jpg')" :data-error="require('../assets/logo.png')" :data-loading="require('../assets/logo.png')">
      <img :data-src="require('../assets/湖泊.jpg')" :data-error="require('../assets/logo256.png')" :data-loading="require('../assets/logo999.png')">
      <img :data-src="require('../assets/雪山.jpg')" :data-error="require('../assets/logo.png')" :data-loading="require('../assets/logo.png')">
    </div>
  </div>
</template>

<script>
export default {
  name: "home",
  data() {
    return {
      // list: [
      //   require('../assets/夕阳.jpg'), require('../assets/沙滩.jpg'),
      //   require('../assets/湖泊.jpg'), require('../assets/雪山.jpg'),
      //   require('../assets/夕阳.jpg'), require('../assets/沙滩.jpg'), 
      //   require('../assets/湖泊.jpg'), require('../assets/雪山.jpg'),
      // ]
    };
  },
}
</script>

<style lang="scss" scoped>
.box {
  width: 400px;
  margin: 0 auto;

  img {
    width: 100%;
    height: 200px;
    display: block;
  }
}
</style>