当前位置: 首页 > news >正文

封装一个上拉加载的组件(无限滚动)

一、封装
1.这个是在vue3环境下的封装
2.整体思路:
2.1传入一个elRef,其实就是一个使用页面的ref。
2.2也可以不传elRef,则默认滚动的是window。

import { onMounted, onUnmounted, ref } from 'vue';
import { throttle } from 'underscore';export default function useScroll(elRef) {let el = windowconst isReachBottm = ref(false)const clientHeight = ref(0)const scrollTop = ref(0)const scrollHeight = ref(0)const scrollListenerHandler = throttle(() => {if(el == window) {clientHeight.value = document.documentElement.clientHeight;  // 当前浏览器窗口的“可视区域”的高度scrollTop.value = document.documentElement.scrollTop;  // 用于获取文档(通常是 HTML 文档)相对于其顶部的滚动距离scrollHeight.value = document.documentElement.scrollHeight;  // 获取到的是整个 HTML 文档的高度,包括所有可见和不可见的内容(即滚动条可滚动的总高度)}else {clientHeight.value = el.clientHeight;scrollTop.value = el.scrollTop;scrollHeight.value = el.scrollHeight;}if (clientHeight.value + scrollTop.value >= scrollHeight.value) {isReachBottm.value = true}}, 100)onMounted(() => {if(elRef) el = elRef.valueel.addEventListener("scroll", scrollListenerHandler)})onUnmounted(() => {el.removeEventListener("scroll", scrollListenerHandler)})return { isReachBottm, clientHeight, scrollTop, scrollHeight }
}

二、使用

import { watch, ref, computed } from 'vue';
import useScroll from '@/hooks/useScroll';
const { isReachBottm, clientHeight, scrollTop, scrollHeight } = useScroll()watch(isReachBottm, (newValue) => {if (newValue) {homeStore.fetchHouselistData()isReachBottm.value = false}
})const isShowSearchBar = computed(() => {return scrollTop.value >= 350
})
http://www.lryc.cn/news/381815.html

相关文章:

  • WHAT - 高性能和内存安全的 Rust(二)
  • 办理河南建筑工程乙级设计资质的流程与要点
  • 分类算法和回归算法区别
  • 利用Frp实现内网穿透(docker实现)
  • 怎么用Excel生成标签打印模板,自动生成二维码
  • java基于ssm+jsp 美食推荐管理系统
  • 数据分析:置换检验Permutation Test
  • 【React】使用Token做路由权限控制
  • 机器学习周记(第四十四周:Robformer)2024.6.17~2024.6.23
  • JAVA学习笔记DAY10——SpringBoot基础
  • 如何在Android中实现多线程与线程池?
  • SCI绘图【1】-不同颜色表示密度和差异--密度图
  • C语言 while循环1
  • [C++][数据结构][LRU Cache]详细讲解
  • 怎样激励员工积极应用新版FMEA培训后的知识?
  • WDF驱动开发-WDF总线枚举(一)
  • React useEffect 执行时机
  • centos7 根目录扩容
  • 为什么要做Redis分区和分片
  • 电脑不小心删除的文件怎么恢复?4个必备恢复方法!
  • GPTCache:革新大模型缓存,降低成本,提升效率
  • [Day 15] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 绘唐3下载地址
  • 两个基因相关性细胞系(CCLE)(升级)
  • 2024全国各地高考录取分数线一览表(含一本、二本、专科)
  • 汇编快速入门
  • Apache Tomcat 10.1.25 新版本发布 java 应用服务器
  • 数据类型 运算符
  • WordPress网创自动采集并发布插件
  • (十三)、MQTT3.1.1-MQTT服务端数据结构设计