Vue懒加载实现

Vue懒加载实现组件数据懒加载使用场景和解决的问题在页面很长时 位于底部的组件可能用户根本就不会到达 那这些组件的数据加载就是一种浪费核心机制 只有组件成功进入到视口区域我们才发送 ajax 请求 接管了由生命周期钩子函数发送的请求模式变成手动控制什么时候发起 具体实现 通过 vueuse core 中的 useIntersect 核心方法 useIntersect 帮助我们监听组件是否进入到视口区域 impor

组件数据懒加载

使用场景和解决的问题

在页面很长时,位于底部的组件可能用户根本就不会到达,那这些组件的数据加载就是一种浪费

核心机制:

        只有组件成功进入到视口区域  我们才发送ajax请求  (接管了由生命周期钩子函数发送的请求模式变成手动控制什么时候发起)

具体实现:

通过 vueuse/core 中的 useIntersectionObserver()

核心方法: useIntersectionObserver 帮助我们监听组件是否进入到视口区域

import { ref } from 'vue' // 引入监听懒加载的方法 import { useIntersectionObserver } from '@vueuse/core' // 封装监听函数 export function useObserve (apiFn) { const target = ref(null) // stop是一个可执行的函数 用来手动停止监听函数 // 不管元素进入还是离开视口区域都不会再执行回调函数 const { stop } = useIntersectionObserver( // 监听目标元素 target, ([{ isIntersecting }], observerElement) => { // isIntersecting: 当前监听的元素是否成功进入到视口区域 如果进来了就是true 否则就是false // observerElement 被观察的dom // console.log(isIntersecting) // 有了一个判断是否进入视口区域的条件 如果是true 代表进入了视口区域 发起请求 if (isIntersecting) { // 可能随着业务的不同 调用接口的方法也不同 apiFn() // 发送请求之后 立刻停止监听 stop() } // 监听处理不是只一次进行的 每次进入移除视口都会再次执行回调 所以需要手动关闭 }, // 进入可视区域的比例是多少才执行回调 0-1 值越大 代表需要进入的面积越大 { threshold: 0 } ) return { target } }

在mian.js中引入并且挂载到Vue的实例上


图片懒加载

使用场景

在存在大量图片的列表中,为了避免大量图片一起发送网络请求而造成网络堵塞,把图片的加载变成按需的状态

浏览器一般最多支持并行发送的请求数6个左右  避免和重要请求竞争

实现机制

监听图片是否成功进入到视口 如果进来了我们才正式发送请求 (操作src就可以)

具体实现

实现方法总结:

方法一: 

        通过滚动事件计算当前dom距离顶部的距离, 到达多少px发起请求 或 给img的src属性赋值, 这个方法需要通过大量的计算

方法二:

        通过VueUse API库中的useIntersectionObserver()方法, 来实现监听组件进入可视区域行为,需要配合vue3.0的组合API的方式才能实现

代码实现:

 
    

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230100.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:07
下一篇 2026年3月16日 下午3:08


相关推荐

  • oracle导入文件命令行,Oracle命令行导入dmp文件

    oracle导入文件命令行,Oracle命令行导入dmp文件一 导入准备使用 impdp 命令 需要在 oracle 数据库服务器操作 使用 sqlplus 或者 Oracle 客户端 PL SQL 链接到相应的 Oracle 数据库实例 进行如下操作 1 创建逻辑目录 该命令不会在操作系统创建真正的目录 最好以 system 等管理员创建 createdirect d test dump 服务器上若没有存在 d test dump 目录 则

    2026年3月19日
    1
  • Qt Creator 的下载与安装

    Qt Creator 的下载与安装一、Qt和QtCreator的区别Qt是C++的一个库,或者说是开发框架,里面集成了一些库函数,提高开发效率。QtCreator是一个IDE,就是一个平台,一个开发环境,类似的比如说VS,也可

    2022年8月5日
    9
  • java中的inherits_node.js 下使用 util.inherits 来实现继承

    java中的inherits_node.js 下使用 util.inherits 来实现继承上一篇博客说到了 node js 继承 events 类实现事件发射和事件绑定函数 其中我们实现了一个公用基类 base 然后在模型中差异化的定义了各种业务需要的模型并继承 base 公共基类 但是其中的继承是一笔带过 今天详细的说下 node js 中继承 varevents require events varutil require util function base th

    2026年3月16日
    2
  • 大一vb程序设计基础_大一c语言程序设计答案

    大一vb程序设计基础_大一c语言程序设计答案spContent=50年前,Basic的诞生结束了计算机只能由专业人员使用的历史,推动了计算机的普及。Windows操作系统的出现又将Basic推向一个新的高度——VisualBasic。它是一个以结构化Basic语言为基础、以事件驱动为机制的“可视”的程序设计语言,能够支持多媒体、数据库、网络等应用,可方便、轻松地开发应用软件。——课程团队课程概述虽然VisualBasic推出已经很多年…

    2022年8月31日
    4
  • Coze(扣子)消息卡片(Message Card)使用指南

    Coze(扣子)消息卡片(Message Card)使用指南

    2026年3月12日
    3
  • Echarts折线图案例

    Echarts折线图案例问题:重置echarts折线图时,总会出现多个数据的拐点,与实际渲染的数据拐点不符合。解决:在实例化echarts后clear上一次的图。myEcharts.clear()案例constoption={//触摸echarts图的提示内容tooltip:{//是否显示提示框show:true,//触发类型://’item’:主要在散点图,饼图等无类目轴的图表中使用

    2025年6月11日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号