【new IntersectionObserver】vue3 數據懶加載

new IntersectionObserver js方法描述步驟
實現邏輯:通過監視底部節點可視情況,獲取新數據進行渲染,如果獲取不到最新數據則顯示暫無其他數據

new IntersectionObserver 是用于監視元素可見度,所以我們只需要監視數據下方的dom是否可見

import { type Ref, watchEffect, ref } from "vue"//我用的ts,不需要可以刪除
interface IntersectionObserverProps {target: Ref<Element | null | undefined>root?: Ref<any>onIntersect: IntersectionObserverCallbackrootMargin?: stringthreshold?: number | number[]
}export function useIntersectionObserver({ target, root, onIntersect, rootMargin = "0px", threshold = 0.1 }: IntersectionObserverProps) {let cleanup: Function//每次調用前先移除監聽const observer: Ref<Nullable<IntersectionObserver>> = ref(null)const stopEffect = watchEffect(() => {cleanup && cleanup()observer.value = new IntersectionObserver(onIntersect, {root: root ? root.value : null,//設置監視器的根節點,不傳則默認為視口rootMargin,//類似于 CSS 的 margin 屬性。用來縮小或擴大 rootBounds,從而影響相交的觸發。threshold/*屬性決定相交比例為多少時,觸發回調函數。取值為 0 ~ 1,或者 0 ~ 1的數組。當我們把  threshold 設置為 [0, 0.25, 0.5, 0.75, 1],元素分別在 0%,25%,50%,75%,100% 可見時,觸發回調函數。*/})const current = target.value//被監視的元素本身current && observer.value.observe(current)// 開始觀察某個目標元素cleanup = () => {if (observer.value) {observer.value.disconnect()// 關閉監視器target.value && observer.value.unobserve(target.value)// 停止觀察某個目標元素}}})//將方法暴露出來外部也可使用return {observer,stop: () => {cleanup()stopEffect()}}
}

不清楚方法配置項的可以看MDN Intersection Observer
組件中使用
將暫無其他數據的dom給到方法去監視

這里我只是簡單演示方法,監視效果達后到可以自行更改ui和觸底后的邏輯
html:

<div v-for='item in data' key='item' >{{item}}</div>
<div  ref="empty">{{"暫無其他數據" }}</div>

js部分

const empty = ref(null)
// 默認在初始創建節點時會觸發一次,因為初始沒有數據節點會在視圖中完整呈現,也可以讓節點在有數據的時候再創建
const { stop, observer } = useIntersectionObserver({target: empty,//最底部的domonIntersect: (entries: any[]) => {//isIntersecting:boolean 表示節點是否可見,intersectionRatio:number 表示節點可見度數值const isIntersecting = entries[0].isIntersecting || entries[0].intersectionRatioif (!isIntersecting) return... //此處寫要實現的邏輯},threshold: 0.1//為1 表示dom完整呈現
})

如果需要詳細講解可以看這兩篇文章:

https://juejin.cn/post/6844903927419256846
https://juejin.cn/post/6950464500491354126#heading-9

也可以去MDN Intersection Observer 查看完整配置項和方法

vue基于組合式API提供的@vueuse/core插件內的useIntersectionObserver
安裝
npm i @vueuse/core

使用
useIntersectionObserver其實就是方便了我們之前封裝的那個步驟,如果想要基于這個二次封裝也是可以的

// 封裝一個通用的方法實現數據的懶加載
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()... //此處寫要實現的邏輯}})// result表示接口懶加載獲取的業務數據// target表示被監聽的DOM元素,需要在模板中被ref屬性綁定return { result, target }
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718773.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu docker deamon無法連接的問題

現象 ubuntu 下使用docker&#xff0c;禿然一天報了一個錯誤 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 排查 排查了半天&#xff0c;是dockerd啟動的時候指定的API listen 和默認的不一致。 systemctl 啟動的時…

【JS】indexedDB基本入門使用;

本文基本僅做個人簡單學習記錄&#xff1b; 相關TS類型&#xff1a; IDBDatabase&#xff1a;open成功后的 result 為 IDBDatabase類型 > idb.result; transaction&#xff1a; transaction(storeNames: string | string[], mode?: IDBTransactionMode, options?: IDBTr…

C++入門全集(4):類與對象【下】

一、再談構造函數 1.1 構造函數體內賦值 我們知道&#xff0c;在創建對象時&#xff0c;編譯器會自動調用構造函數給對象中的各個成員變量一個合適的初始值 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _yea…

windows zip壓縮報錯includes characters that cannot be used in a compressed folder

Windows 用 zip 壓縮文件夾時報錯&#xff1a; <文件> cannot be compressed because includes characters that cannot be used in a compressed folder, such as <非法字符>. You should rename this file or directory.同 [1]。考慮用 python 批量檢測非 ascii…

SOCKS55代理 VS Http代理,如何選擇?

在使用IPFoxy全球代理時&#xff0c;選擇 SOCKS55代理還是HTTP代理&#xff1f;IPFoxy代理可以SOCKS55、Http協議自主切換&#xff0c;但要怎么選擇&#xff1f;為解決這個問題&#xff0c;得充分了解兩種代理的工作原理和配置情況。 在這篇文章中&#xff0c;我們會簡要介紹 …

我常用的大模型和Prompt有哪些?

常用的大模型及其對比 以前提到過&#xff0c;我們公司鼓勵大家多使用GPT這樣的大模型&#xff0c;一方面能夠提高工作效率&#xff0c;一方面使用的越多&#xff0c;越了解&#xff0c;越有可能發現應該怎么將其跟我們公司的產品結合起來。 但是出于安全考慮&#xff0c;如果…

Synchronized 詳解(一)

在C程序代碼中我們可以利用操作系統提供的互斥鎖來實現同步塊的互斥訪問及線程的阻塞及喚醒等工作。在Java中除了提供Lock API外還在語法層面上提供了synchronized關鍵字來實現互斥同步原語,本文將對synchronized關鍵字詳細分析。 帶著問題去理解Synchronized 提示 請帶著這…

10、BossCms代碼審計

1、任意文件上傳 限制 復現 POST /system/extend/ueditor/php/controller.php?actionuploadfile&encodeutf-8 HTTP/1.1 Host: bosscms.com Content-Length: 761 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome…

為什么要學習三維GIS開發?從技術層面告訴你答案

大家都知道GIS開發屬于GIS行業中就業薪資較高的崗位&#xff0c;并且測繪、遙感以及城規等相關專業的畢業生紛紛轉行做webgis開發。 那么&#xff0c;今天小編從技術層面探討一下&#xff0c;為什么建議大家不要僅僅停留在webgis&#xff0c;而要繼續往前學習三維GIS開發&…

TSINGSEE青犀AI智能分析網關V4智慧油田安全生產監管方案

一、方案背景 隨著科技的不斷發展&#xff0c;視頻監控技術在油田行業中得到了廣泛應用。為了提高油田生產的安全性和效率&#xff0c;建設一套智能視頻監控平臺保障安全生產顯得尤為重要。本方案采用先進的視頻分析技術、物聯網技術、云計算技術、大數據和人工智能技術&#…

Linux設備模型(十) - bus/device/device_driver/class

四&#xff0c;驅動的注冊 1&#xff0c;struct device_driver結構體 /** * struct device_driver - The basic device driver structure * name: Name of the device driver. * bus: The bus which the device of this driver belongs to. * owner: The module own…

JavaWeb Tomcat啟動、部署、配置、集成IDEA

web服務器軟件 服務器是安裝了服務器軟件的計算機&#xff0c;在web服務器軟件中&#xff0c;可以部署web項目&#xff0c;讓用戶通過瀏覽器來訪問這些項目。 Web服務器是一個應用程序&#xff08;軟件&#xff09;&#xff0c;對HTTP協議的操作進行封裝&#xff0c;使得程序…

MATLAB讀取txt文本數據及可視化指南

MATLAB讀取txt文本數據的說明指南 目錄 MATLAB讀取txt文本數據的說明指南摘要1. 數據準備2. 讀取數據3. 繪制圖形4. 小結 摘要 在MATLAB中&#xff0c;讀取txt文本格式文件數據是一項基本的操作&#xff0c;特別是在數據分析和可視化方面。本文將介紹如何使用MATLAB讀取txt文本…

C++ 基礎知識

一. 預備知識 1. C的編程方式 過程性語言 (結構化、自頂向下)、面向對象語言、泛型編程 (創建獨立于類型的代碼) 2. 創建源代碼文件的技巧 擴展名&#xff1a;.cpp 二. 第一個程序 - HelloWorld main() 入口點 返回 int 標準庫 iostream std: 標準庫的縮寫 Statement…

HarmonyOS-使用call事件拉起指定UIAbility到后臺

使用call事件拉起指定UIAbility到后臺 許多應用希望借助卡片的能力&#xff0c;實現和應用在前臺時相同的功能。例如音樂卡片&#xff0c;卡片上提供播放、暫停等按鈕&#xff0c;點擊不同按鈕將觸發音樂應用的不同功能&#xff0c;進而提高用戶的體驗。在卡片中使用postCardA…

科技的成就(五十七)

535、Machine Learning "1959 年 7 月&#xff0c;塞繆爾首創 Machine Learning 一詞。塞繆爾在“Some Studies in Machine Learning Using theGame of Checkers”一文中給 Machine Learning 下了個非正式定義&#xff1a;沒有明確編程指令的情況下&#xff0c;能讓計算機…

【js中的作用域】

理解 js中的作用我們可以分為三個部分 全局作用域函數作用域塊級作用域 全局作用域 不在任何函數內部或者大括號中聲明的變量,都是再全局作用域下,全局聲明的變量可以在程序中的任何位置訪問 函數作用域 函數作用域也叫局部作用域,如果一個變量聲名在一個函數內部,那么它…

LSTM進行字符級文本生成(pytorch實現)

文章目錄 基于pytorch的LSTM進行字符集文本生成前言一、數據集二、代碼實現 1.到入庫和LSTM進行模型構建2.數據預處理函數3.訓練函數4.預測函數5.文本生成函數6.主函數完整代碼總結 前言 本文介紹了機器學習中深度學習的內容使用pytorch構建LSTM模型進行字符級文本生成任務 一…

王者榮耀整蠱搭建直播新玩法/obs貼紙配置教程

最近很火的王者榮耀整蠱直播&#xff0c;相信很多玩王者的玩家也想開一個直播&#xff0c;但是看到這種直播娛樂效果很有意思也想搭建一個&#xff0c;這里夢哥給大家出了一期搭建的教程&#xff01; 進階版視頻教程&#xff1a; 這期的教程是進階版新玩法升級&#xff0c;具體…

Vue3:使用 Composition API 不需要 Pinia

在 Vue.js 開發的動態環境中&#xff0c;在單個組件中處理復雜的業務邏輯可能會導致笨重的文件和維護噩夢。雖然 Pinia 提供集中式狀態管理&#xff0c;但僅依賴它來處理復雜的業務邏輯可能會導致代碼混亂。本文探討了使用 Composition API 的替代方法&#xff0c;說明開發人員…