vue3 图片懒加载的两种方式、IntersectionObserver和useIntersectionObserver实例详解

下面是针对“vue3 图片懒加载的两种方式、IntersectionObserver和useIntersectionObserver实例详解”这个话题的详细讲解。

什么是懒加载?

图片懒加载是 Web 开发中的一种优化技术,通过延迟加载图片的方式来提升页面的加载速度和性能。当页面滚动到相关图片的位置时,才会去加载这些图片资源,避免页面开始时就同时请求所有图片资源,从而降低页面的加载速度。

IntersectionObserver 原生 API 懒加载

IntersectionObserver 是一个能观察元素与视口是否交叉的 API。交叉指的是两者是否存在重叠,也就是是否出现在视口中。如果目标元素在可见区域内,则交叉为 true;否则,交叉为 false。通过这种方式,我们可以很容易实现图片懒加载的效果,使得在用户需要加载图片时才真正加载。以下是用 IntersectionObserver 实现图片懒加载的代码示例。

<!-- template代码 -->
<img src="loading.gif" data-src="your-image.jpg" />

<!-- script代码 -->
<script>
  const observer = new IntersectionObserver(entries => {
    entries.forEach(entry => {
      const { target } = entry;
      if (entry.isIntersecting && target.tagName === 'IMG') {
        target.src = target.dataset.src;
        observer.unobserve(target);
      }
    });
  });

  const images = document.querySelectorAll('img[data-src]');
  images.forEach(image => observer.observe(image));
</script>

这段代码首先为所有需要延迟加载的图片添加了一个 data-src 的属性,用于保存待加载的真实图片地址。之后通过 document.querySelectorAll 将所有包含 data-src 属性的图片遍历出来,并通过 IntersectionObserver 监听图片与视口的交叉行为,一旦交叉,则将 data-src 的值复制到 src 属性中,从而实现图片的延迟加载。

useIntersectionObserver 懒加载

useIntersectionObserver 是 vue3 中提供的一个响应式组合 API。它可以方便地使用 IntersectionObserver 来实现图片懒加载的效果,并提供了一个更好的声明式组件化方式。以下是用 useIntersectionObserver 实现图片懒加载的代码示例。

<!-- template代码 -->
<template>
  <div v-for="image in images">
    <img :src="image.url" v-if="image.isIntersecting" />
  </div>
</template>

<!-- script代码 -->
<script>
  import { ref, onMounted } from 'vue';
  import { useIntersectionObserver } from '@vueuse/core';

  export default {
    setup() {
      const images = ref([...]); // 这里需要替换成你自己的图片数据

      const intersectionObserver = useIntersectionObserver(
        entries => {
          entries.forEach(entry => {
            const { target, isIntersecting } = entry;
            target.isIntersecting = isIntersecting;
          });
        },
        {
          threshold: 0,
        }
      );

      onMounted(() => {
        images.value.forEach(image => {
          // 要确保所有图片的 isIntersecting 初始值都是false
          image.isIntersecting = false;
          intersectionObserver.observe(image);
        });
      });

      return { images };
    },
  };
</script>

这段代码通过 @vueuse/core 里的 useIntersectionObserver 来实现图片懒加载的效果。当每个图片元素进入视口的时候,就会将其 isIntersecting 属性设置为 true,从而显示真实的图片。在 onMounted 阶段,我们对每个图片元素进行 intersectionObserver.observe 注册,使其开始被监听。由于在 initial 阶段,图片还没有进入到视口,故初始值 isIntersecting 属性值被设置为 false

通过这两种方式,我们可以非常方便地实现图片懒加载的效果,提高网页的加载速度和性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3 图片懒加载的两种方式、IntersectionObserver和useIntersectionObserver实例详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue中的过滤器(filter)详解

    Vue中的过滤器(Filter)详解 什么是过滤器(Filter)? 过滤器(Filter)是Vue.js提供的一种可复用功能的方法,用于对数据的格式化处理。 在Vue.js的模板语法中, 可以用管道符(|)来应用过滤器。管道符前面是要过滤的数据项,管道符后面是过滤器的名称。 例如: <div>{{message | capitalize}}&l…

    Vue 2023年5月27日
    00
  • vue 项目代码拆分的方案

    以下是“Vue项目代码拆分的方案”的完整攻略: 1. 为什么需要代码拆分 在一个大型的Vue项目中,随着业务的增长,代码量也不断增加。如果所有的代码都写在单个文件中,会降低代码的可维护性、阅读性和重用性,代码文件会变得非常庞大和复杂,难以维护。 而代码拆分可以将代码按照逻辑、功能等方面进行拆分,将不同的功能模块分割到不同的文件、组件中,可以让代码更为模块化、…

    Vue 2023年5月27日
    00
  • Vue实现跑马灯简单效果

    下面是 Vue 实现跑马灯简单效果的攻略: 概述 跑马灯是常用于展示广告、公告等信息的效果。在 Vue 中实现跑马灯,可以使用 Vue 的内置指令 v-for 和过渡效果实现。 实现步骤 使用 v-for 指令循环渲染数据 使用 CSS3 的过渡效果实现轮播效果 使用 computed 计算属性进行数据循环 使用 setInterval() 方法实现自动轮播…

    Vue 2023年5月27日
    00
  • ant design vue 表格table 默认勾选几项的操作

    Ant Design Vue 表格(Table)默认勾选几项的操作,可以通过在表格数据中为需要默认勾选的行数据添加一个 selected 属性,并且在表格操作栏添加一个全选按钮,并将其与表格的 rowSelection 属性绑定起来即可实现。 以下是完整的实现步骤: 设置表格数据源 首先,需要设置表格的数据源,可以使用一个数组对象来模拟,示例代码如下: da…

    Vue 2023年5月28日
    00
  • 解决vue中post方式提交数据后台无法接收的问题

    当在 Vue 中使用 post 方式提交数据到后台时,有时候会出现后台无法接收到数据的情况。这可能是由于请求头未设置导致的。在这种情况下,您可以尝试以下两种解决方法: 解决方法一:设置请求头 在使用 post 方法向后台服务器请求数据时,在请求头部分添加 Content-Type 和 X-Requested-With 两个参数。这样后台服务器就能正确地接收到…

    Vue 2023年5月28日
    00
  • Vue项目部署上线全过程记录(保姆级教程)

    非常感谢您对Vue项目上线过程的关注。以下是我整理的“Vue项目部署上线全过程记录(保姆级教程)”的详细攻略。 确认服务器环境在开始之前,请确保您已经购买了云服务器,在服务器上安装好操作系统和需要的软件环境。推荐使用Linux系统,并保证服务器具备如下配置: 操作系统:CentOS 7/Ubuntu 14.04及以上版本; CPU:1核及以上; 内存:2GB…

    Vue 2023年5月28日
    00
  • 分分钟玩转Vue.js组件(二)

    让我来详细讲解一下“分分钟玩转Vue.js组件(二)”的完整攻略。 简介 Vue.js 是一款非常流行的 JavaScript 库,用于构建用户界面。Vue.js 具有简单易学、轻量灵活、响应式渲染及组件化等特点, 非常适合构建现代化的 Web 应用程序。 本篇文章将带大家深入了解 Vue.js 中的组件化,在掌握基本概念后,教你如何使用 Vue.js 构建…

    Vue 2023年5月27日
    00
  • 使用vue中的v-for遍历二维数组的方法

    使用vue中的v-for可以快速方便地遍历数组,但是遍历二维数组需要一些特殊的处理方法。以下是遍历二维数组的方法: 方法一:使用两个嵌套的v-for循环 我们可以使用两个嵌套的v-for循环来遍历二维数组。外层循环遍历一维数组,内层循环遍历二维数组,这样可以逐个输出二维数组的每个元素。 <div v-for="(oneDimensionalA…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部