Vueuse包提供的useIntersectionObserver 方法如何使用(参数;返回值)

教程侠
• 阅读 2914

 const {stop} = useIntersectionObserver(target, fn, options)

1、参数一target表示被监听的DOM元素

2、参数二是回调函数,用于通知监听的动作(回调函数的第一个形参isIntersecting表示被监听的元素已经进入了可视区)

3、参数三 表示配置选项

stop 是停止观察是否进入或移出可视区域的行为

const { stop } = useIntersectionObserver(
target 是观察的目标dom容器,必须是dom容器,而且是vue3.0方式绑定的dom对象
 target,
 // isIntersecting 是否进入可视区域,true是进入 false是移出
 // observerElement 被观察的dom
 ([{ isIntersecting }], observerElement) => {
   // 在此处可根据isIntersecting来判断,然后做业务
 },
)

业务功能场景

基于该方法实现组件的懒加载

第一步:在SRC下封装一个钩子函数,src/hooks/index.js文件夹下;
代码如下:

// 封装一个通用的方法实现数据的懒加载
import { useIntersectionObserver } from '@vueuse/core'
import { ref } from 'vue'

export const useLazyData = (apiFn) => {
  // target表示组件的最外层div元素
  const target = ref(null)
  // 懒加载接口返回的数据
  const result = ref([])
  // 监听组件是否进入可视区
  const { stop } = useIntersectionObserver(target, ([{ isIntersecting }]) => {
    // 如果target对应的DOM进入可视区,那么该回调函数就触发
    if (isIntersecting) {
      // 被监听的DOM进入了可视区:此时调用接口获取数据;停止继续监听
      stop()
      apiFn().then(data => {
        result.value = data.result
      })
    }
  })
  // result表示接口懒加载获取的业务数据
  // target表示被监听的DOM元素,需要在模板中被ref属性绑定
  return { result, target }
}

第二步:在所需要的文件夹中导入
例如:

Vueuse包提供的useIntersectionObserver 方法如何使用(参数;返回值)

懒加载的好处:
页面加载速度快、可以减轻服务器的压力、节约了流量,用户体验好

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
ROS回调函数传参
ROS编程过程中遇到不少需要给回调函数传递多个参数的情况,下面总结一下,传参的方法:一、回调函数仅含单个参数voidchatterCallback(conststd_msgs::String::ConstPtr&msg){ROS_INFO("Iheard:%s",msg
晴空闲云 晴空闲云
4年前
JavaScript中MutationObServer监听DOM元素详解
DOM的MutationObServer接口,可以在DOM被修改时异步执行回调函数,我的理解就是可以监听DOM修改。基本使用可以通过MutationObserver构造函数实例化,参数是一个回调函数。jsletobservernewMutationObserver(()console.log("change"));console.log(obs
住儿 住儿
2年前
JS的一些优雅写法
JS的一些优雅写法reduce1、可以使用reduce方法来实现对象数组中根据某一key值求和例如,假设有以下对象数组:constarr其中,reduce方法的第一个参数是一个回调函数,它接收两个参数:累加器(acc)和当前元素(cur)。回调函数的返回值
LinMeng LinMeng
5年前
js 的 forEach,map,filter,some,every,find(es6),reduce详解
forEach()定义和用法forEach()方法用于调用数组的每个元素,并将元素传递给回调函数注意:forEach()对于空数组是不会执行回调函数的。语法array.forEach(function(currentValue,index,arr),thisValue)参数function(currentValue,index,a
菜园前端 菜园前端
2年前
什么是回调函数?
原文链接:什么是回调函数?简单的来说,一个函数作为另外一个函数的参数,可以称为回调函数。这个理解其实不完全对,回调的意义根本没有体现出来,何为回调?也就是说一个函数你定义了,你没有马上的去调用它,而是交给了另外一个函数去调用,这才属于回调函数。缺点直接使用
Wesley13 Wesley13
4年前
mysql中时间比较的实现
MySql中时间比较的实现unix\_timestamp()unix\_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970010100:00:0
Stella981 Stella981
4年前
AVIOInterruptCB结构体分析
1AVIOInterruptCB结构体定义在/usr/include/libavformat/avio.h中有如下的结构体定义,根据头文件中的注释:这是一个回调函数和参数的结构体。有些函数是在阻塞的,用这个回调函数来检查是否中断这个阻塞函数,如果回调函数返回1,那么这个正在阻塞的操作将被中止。那么就用这个结构体里的参数opaque来回调其中的callb
Wesley13 Wesley13
4年前
Java Web(九)
Listener&FilterListener  监听器1、能做什么事?  监听某一个事件的发生。状态的改变。2、监听器的内部机制  其实就是接口回调.接口回调1、需求:  A在执行循环,当循环到5的时候,通知B。 
Stella981 Stella981
4年前
JavaScript回调函数的高手指南
摘要:本文将会解释回调函数的概念,同时帮你区分两种回调:同步和异步。回调函数是每个前端程序员都应该知道的概念之一。回调可用于数组、计时器函数、promise、事件处理中。本文将会解释回调函数的概念,同时帮你区分两种回调:同步和异步。1.回调函数首先写一个向人打招呼的函数。只需要创建一个接受name参数的函数gree
Stella981 Stella981
4年前
ES6 Promise 对象扯谈
newPromise(/executor/function(resolve,reject){...});Promise的构造函数接收一个函数作为参数,函数里面传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。其实这里用“成功”和“失败”来描述并不准确,按照标准来
Stella981 Stella981
4年前
Extjs校验配置项
Extjsform组件1、Ext.form.Action配置项:success:执行成功后回调的函数,包括两个参数:form和actionfailure:执行失败后回调的函数,包括两个参数:form和actionmethod:表单的提交方式,有效值包括GET、POSTparams:传递到请求中的参数url:动作