引言
图片懒加载的原理
选择合适的库
安装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>
详细说明
images
: 存储图片数据的数组。loadedImages
: 存储已加载图片的引用,以避免重复加载。mounted
钩子:在组件挂载时初始化懒加载。handleScroll
方法:当用户滚动时,重新初始化懒加载。initLazyload
方法:使用imagesLoaded
函数来检测图片是否进入视口,并更新图片的src
属性。
脚本部分: