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

yizhihongxing

下面是针对“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实现多引擎搜索及关键字提示

    实现基于Vue的多引擎搜索及关键字提示主要包括以下步骤: 构建基础页面结构 在HTML文件中,构造基础的页面结构,包括搜索框和搜索按钮等必要的组件。同时,引入Vue.js库和相关依赖。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> …

    Vue 2023年5月27日
    00
  • Vue.sync修饰符与$emit(update:xxx)详解

    让我来给你详细讲解一下Vue.sync修饰符与$emit(update:xxx)的使用方法。 Vue.sync修饰符 Vue.sync修饰符是Vue.js 2.3.0版本中添加的一个修饰符,它主要用于简化父子组件之间的双向数据绑定。在Vue 2.3.0版本中,你可以使用Vue.sync修饰符来实现子组件对父组件数据的更新。 <template> …

    Vue 2023年5月28日
    00
  • vue使用json最简单的两种方式分享

    下面是关于“vue使用json最简单的两种方式”的详细讲解攻略。 方式一:使用axios获取json数据 axios是一个基于Promise的HTTP客户端,用于快速、简便地发送HTTP请求。这里我们使用axios获取json数据。 首先,我们需要安装axios: npm install axios –save 然后,在Vue组件中引入axios并发送aj…

    Vue 2023年5月27日
    00
  • vue请求本地自己编写的json文件的方法

    介绍如下: 一、准备JSON文件 首先,需要准备好本地的JSON文件,示例文件可以参考以下结构: { "data": [ { "id": 1, "title": "文章1", "content": "这是文章1的内容" }, { &quot…

    Vue 2023年5月28日
    00
  • 在VUE中实现文件下载并判断状态的方法

    实现文件下载并判断状态的方法涉及到前端和后端两个方面,主要的实现步骤如下: 前端部分:在Vue中发起文件下载请求,一般采用axios或者vue-resource等请求库来实现。具体步骤如下: 安装axios或者vue-resource npm install axios –save npm install vue-resource –save 引入相关库…

    Vue 2023年5月28日
    00
  • Vue组件通信$attrs、$listeners实现原理解析

    我来为您详细讲解“Vue组件通信$attrs、$listeners实现原理解析”的完整攻略。 一、背景介绍 在Vue组件的开发中,如何实现父子组件之间的通信一直是一个比较困扰开发者的难点。Vue官方提供的有prop、$emit、$parent/$children、$refs等方法,而$attrs和$listeners则是比较特殊的属性,不仅可以实现父子组件的…

    Vue 2023年5月28日
    00
  • 浅谈vue项目重构技术要点和总结

    浅谈Vue项目重构技术要点和总结 在Vue项目重构的过程中,需要注意以下几个技术要点: 1. 把公共功能封装成组件 在项目重构的过程中,需要尽量避免重复的代码。因此,我们可以把一些公共的功能封装成组件,供其他地方复用。例如,我们可以封装一个翻页组件,用于多处分页展示。如下所示: <template> <div> <button …

    Vue 2023年5月28日
    00
  • vue3渲染函数(h函数)的变更剖析

    文本格式规范: 标题1 标题2 标题3 列表1 列表2 代码块: //这里写代码 在Vue3中,渲染函数(h函数)的变更是非常重要的一个特性,可以让我们更加方便、灵活地构建组件和页面。下面对这个变更做出详细说明。 Vue3中h函数变更的重要性 在Vue2中,当我们需要编写组件的渲染函数时,需要手写模板。虽然利用Vue模板的语法可以让编写模板变得更加便捷,但还…

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