引言

图片懒加载的原理

选择合适的库

安装imagesloaded

首先,需要安装imagesloaded库。可以通过npm或yarn进行安装:

npm install imagesloaded --save

或者

yarn add imagesloaded

Vue组件实现

下面是一个使用imagesloaded组件的Vue.js组件示例:

<template>
  <div class="image-container" @scroll="handleScroll">
    <img v-for="image in images" :key="image.src" :data-src="image.src" class="lazy-image" />
  </div>
</template>

<script>
import imagesLoaded from 'imagesloaded';

export default {
  data() {
    return {
      images: [
        { src: 'image1.jpg' },
        { src: 'image2.jpg' },
        { src: 'image3.jpg' },
        // 更多图片...
      ],
      loadedImages: [],
    };
  },
  mounted() {
    this.initLazyload();
  },
  methods: {
    handleScroll() {
      this.initLazyload();
    },
    initLazyload() {
      const imageContainer = this.$el;
      imagesLoaded(imageContainer, (instance) => {
        instance.images.forEach((img) => {
          if (!this.loadedImages.includes(img.img)) {
            img.img.src = img.img.getAttribute('data-src');
            this.loadedImages.push(img.img);
          }
        });
      });
    },
  },
};
</script>

<style>
.image-container {
  overflow-y: auto;
  height: 300px; /* 根据实际需要设置高度 */
}
.lazy-image {
  width: 100%;
  display: block;
}
</style>

详细说明

  1. 脚本部分

    • images: 存储图片数据的数组。
    • loadedImages: 存储已加载图片的引用,以避免重复加载。
    • mounted钩子:在组件挂载时初始化懒加载。
    • handleScroll方法:当用户滚动时,重新初始化懒加载。
    • initLazyload方法:使用imagesLoaded函数来检测图片是否进入视口,并更新图片的src属性。

总结