我是Nuxtjs的新手。我正在制作一个名为照片的页面,它显示了很多DOM,因为我获取照片的API不提供分页查询(页面,限制)。目前它返回的数据包含5000张照片。
为了提高性能,我想找到一种方法来只渲染视口中可见的html标签。其他html标签应该是惰性渲染,直到用户向下滚动。我已经尝试了nuxt-lazy-load,但这个包只惰性加载图像,它仍然渲染所有html标签。
我会非常感谢所有的建议。谢谢。
我用的是Nuxt 2.15.8,Vue 2.7.10。
<template>
<div>
<h1>Page Photos</h1>
<div v-if="photos.length > 0">
<div v-for="(photo, index) in photos" :key="photo.id"> **(I want to lazy render this element until user scroll down to here)**
<h5>{{ `${index + 1}. ${photo.title}` }}</h5>
<img
:alt="photo.title"
:src="photo.url"
width="600"
height="600"
/>
<br />
</div>
</div>
</div>
</template>
<script>
export default {
async asyncData(context) {
try {
const response = await fetch(context.$constants.photosApi).then((r) =>
r.json()
);
return {
photos: response || [],
};
} catch (error) {
console.log("error", error);
return {
photos: [],
};
}
},
};
</script>
1条答案
按热度按时间igsr9ssn1#
vue-virtual-scroller就是您要查找的内容。
它将在DOM中渲染,只渲染当前视口中可见的元素(您可以通过检查DOM来仔细检查,查看是否没有比您看到的元素更多的元素)。
至于图像的惰性负载,请看下面的内容:https://stackoverflow.com/a/72232543/8816585
当然,您可以完全混合使用这两种技术。