vue.js 如何在NuxtJs中创建延迟加载html标记

jm81lzqq  于 2022-11-25  发布在  Vue.js
关注(0)|答案(1)|浏览(111)

我是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>
igsr9ssn

igsr9ssn1#

vue-virtual-scroller就是您要查找的内容。
它将在DOM中渲染,只渲染当前视口中可见的元素(您可以通过检查DOM来仔细检查,查看是否没有比您看到的元素更多的元素)。
至于图像的惰性负载,请看下面的内容:https://stackoverflow.com/a/72232543/8816585
当然,您可以完全混合使用这两种技术。

相关问题