【前端 | CSS】滾動到底部加載,滾動監聽、懶加載

背景

在日常開發過程中,我們會遇到圖片懶加載的功能,基本原理是,滾動條滾動到底部后再次獲取數據進行渲染。

那怎么判斷滾動條是否滾動到底部呢?滾動條滾動到底部觸發時間的時機和方法又該怎樣定義?

針對以上問題我做了以下總結:

如何判斷滾動條已經滾動到底部

先看一張圖片解析

從圖中不難看出:

滾動條滾動的最大距離+父盒子的高度 = 子盒子的高度;

也就是說子盒子的高度-父盒子的高度>=滾動距離時,滾動條觸底;

那如何獲取盒子的高度和滾動距離

大多數情況下子元素的高度是不確定的,會隨著圖片的加載子元素的高度越來越高,

我們可以通過

elemet.scrollHeight 獲取子盒子的高度;

elemet.scrollTop 獲取滾動距離;

elemet?.clientHeight 獲取父盒子的高度;

參考

【前端 | CSS】盒模型clientWidth、clientHeight、offsetWidht、offsetHeight_好喝的西北風的博客-CSDN博客只讀屬性Element.clientWidth對于內聯元素以及沒有 CSS 樣式的元素為 0;該屬性包括內邊距(padding),但不包括邊框(border)、外邊距(margin)和垂直滾動條(如果存在)offsetWidth 是測量包含元素的邊框 (border)、水平線上的內邊距 (padding)、豎直方向滾動條 (scrollbar)(如果存在的話)、以及 CSS 設置的寬度 (width) 的值。https://blog.csdn.net/weixin_43340372/article/details/132210911?spm=1001.2014.3001.5501

示例代碼

HTML

<!DOCTYPE html>
<html lang="CH-EN"><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta name="viewport" content="width=device-width" /><title>flex</title></head><body><div class="container"><div class="item">內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容</div></div></body>
</html>

js

<script>window.onload = () => {// 基本思路// 滾動體條所能滾動的最大高度 + continer的高度 = 子盒子(item)的高度;const container = document.querySelector(".container");console.dir(container);const item = document.querySelector(".item");container.addEventListener("scroll",() => {// 父盒子的高度const clientHeight = container.clientHeight;// 子盒子的高度(滾動盒子的高度)const scrollHeight = container.scrollHeight;// 滾動的最大距離const scrollHeight_clientHeight = scrollHeight - clientHeight;// 實時滾動距離const scrollTop = container.scrollTop;// 滾動的最大距離小于等于實時滾動距離時,滾動到了底部if(scrollHeight_clientHeight <= scrollTop){console.log("滾動到底部");}})};
</script>

style

<style>body,html {height: 100%;overflow: hidden;margin: 0;padding: 0;}::-webkit-scrollbar {width: 10px;background-color: gray;}::-webkit-scrollbar-thumb {background-color: black;border-radius: 5px;}.container {height: 500px;width: 400px;margin: 100px auto;background-color: rgb(6, 100, 64);border: blue 5px solid;overflow: auto;}.item {height: 800px;width: 200px;margin: 0 auto;color: #fff;line-height: 200px;overflow: hidden;background-color: rgb(235, 77, 77);}
</style>

線上示例

滾動加載線上示例

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

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

相關文章

數據集成革新:去中心化微服務集群的無限潛能

在當今數據密集型的業務環境下&#xff0c;傳統的集中式架構已經難以滿足高可用性和高并發性的要求。而去中心化微服務集群則通過分散式的架構&#xff0c;將系統劃分為多個小型的、獨立部署的微服務單元&#xff0c;每個微服務負責特定的業務功能&#xff0c;實現了系統的高度…

centos系統kubeadm安裝K8S_v1.27.x容器使用docker(K8S_v1.24版本以后依然使用docker容器管理)

kubeadm安裝K8S_v1.27.x容器使用docker 按照需要的文檔點擊這里下載 一.環境部署 1.1基礎環境配置 主機IP 主機名規劃 192.168.186.128 k8s-master01 192.168.186.129 k8s-node01 192.168.186.130 k8s-node02 1.2修改機器名稱 #永久修改主機名 hostnamectl set-hostname …

docker搭建opengrok環境

引言&#xff1a; 由于這幾天開始 http://aospxref.com/ 網站沒法用了。用習慣了opengrok的方式看AOSP的源碼&#xff0c;其他的在線查看源碼的網站用起來都不是很理想。所以考慮搭建一個環境。 首先網上看了下opengrok的環境搭建的方式&#xff0c;最終還是采用docker的方…

【JS 一個數組隨機選取x個元素】

可以使用Math.random()方法&#xff0c;結合循環和splice()方法來實現&#xff1a; let arr [1,2,3,4,5,6,7,8,9]; let randomArr [];for(let i 0; i < 4; i) {let randomIndex Math.floor(Math.random() * arr.length);let randomNum arr.splice(randomIndex, 1)[0];…

基于C#的無邊框窗體陰影繪制方案 - 開源研究系列文章

今天介紹無邊框窗體陰影繪制的內容。 上次有介紹使用雙窗體的方法來顯示陰影&#xff0c;這次介紹使用API函數來進行繪制。這里使用的是Windows API函數&#xff0c;操作系統的窗體也是用的這個來進行的繪制。 1、 項目目錄&#xff1b; 下面是項目目錄&#xff1b; 2、 函數介…

日常BUG——SpringBoot模糊映射

&#x1f61c;作 者&#xff1a;是江迪呀??本文關鍵詞&#xff1a;日常BUG、BUG、問題分析??每日 一言 &#xff1a;存在錯誤說明你在進步&#xff01; 一、問題描述 SpringBoot在啟動時報出如下錯誤&#xff1a; Caused by: java.lang.IllegalStateExceptio…

ARM處理器

1、RISC處理器&#xff1a; RISC (Reduced Instruction Set Computer) 微處理器是一種計算機微處理器架構&#xff0c;其設計原則是通過簡化指令集來提高執行速度。 (1)、RISC處理器的設計理念&#xff1a; 簡化指令集&#xff1a;RISC 微處理器的指令集非常精簡&#xff0c…

【Python COM】Word 自動縱向合并相同內容單元格

使用場景 docxtempl 庫不支持動態縱向合并單元格&#xff0c;所以寫了這段代碼用來曲線救國。 使用方法 需要縱向合并的單元格加上在文本末尾加上“【縱向合并】”&#xff0c;然后調用此函數&#xff0c;就會自動縱向合并相同內容的單元格。 代碼 需要安裝 pywin32 庫。 …

VC2015,C++內存中運行EXE文件

VC2015,C內存中運行EXE文件&#xff0c;點擊可以下載 VC2015項目中所用的源碼主要源自于網絡&#xff0c;修正一些錯誤后&#xff0c;源碼如下&#xff0c;此源碼在VC6中可以正常編譯&#xff0c; 但在VC2015中&#xff0c;就會出現一些錯誤&#xff0c;本項目源碼已經把錯誤修…

文件批量重命名001到100

文件批量重命名001到100如何搞定&#xff1f;這是一個許多朋友都在熱議的話題&#xff0c;今天我將向大家介紹這方面的內容&#xff0c;希望你會喜歡。總的來說&#xff0c;文件重命名快捷鍵CtrlF2在日常工作中非常實用。它可以輕松快速地完成文件和文件夾的重命名操作&#xf…

儲能pcb的布局注意事項與制造難點

隨著新能源需求的不斷增長和能源結構的轉型&#xff0c;儲能技術的市場規模不斷擴大。儲能PCB作為儲能系統中電池模塊的重要組成部分&#xff0c;對整個系統的安全性和性能起到關鍵作用。今天我們就來聊聊&#xff0c;儲能pcb有什么特征。 什么是儲能&#xff1a;儲能是指能量…

用友Java后端筆試2023-8-5

計算被直線劃分區域 在笛卡爾坐標系&#xff0c;存在區域[A,B],被不同線劃分成多塊小的區域&#xff0c;簡單起見&#xff0c;假設這些不同線都直線并且不存在三條直線相交于一點的情況。 img 那么&#xff0c;如何快速計算某個時刻&#xff0c;在 X 坐標軸上[ A&#xff0c;…

kubernetes 中的事件(event)簡介以及如何收集event和基于event告警

引用另外一篇文章對k8s event的介紹 1.什么是kubernetes事件 Kubernetes Events 是一種 Kubernetes 資源對象&#xff0c;記錄了某個組件在某個時間做了某個動作&#xff0c;用于展示集群內發生的情況&#xff0c;當 Kubernetes 集群中資源狀態發生變化時&#xff0c;可以產生…

PostMan 教程

安裝https://www.cnblogs.com/mafly/p/postman.html Postman 使用方法詳解https://blog.csdn.net/fxbin123/article/details/80428216 postman進行http接口測試https://blog.csdn.net/five3/article/details/53021084 postman的使用方法詳解&#xff01;最全面的教程https:/…

Golang項目中如何輕松實現私有倉庫pkg包的引入

在企業內部創建一個公共的Golang模塊工程可以幫助提高代碼復用性和開發效率。本文將從如何創建一個公共的Golang工程開始&#xff0c;指導你一步步創建它、并引入到你的工程中。 1、公共模塊規范 下面是一個簡單的步驟指南來創建這樣一個公共模塊項目。 創建版本控制倉庫&am…

Verdi_traceX and autotrace

Verdi_traceX and autotrace Trace X From nWave/nTrace of from the Teporal Flow View. Show Paths on Flow ViewShow Paths on nWave 若Waveform中有X態&#xff0c;鼠標右鍵會有Trace X的選項&#xff1b; 會自動打開Temporal Flow View窗口&#xff0c;展示對應路徑&am…

RocketMQ、Dashboard部署以及安全設置

RocketMQ、dashboard部署以及安全設置 一、啟動RocketMQ1.1 下載RocketMQ1.2 修改配置文件1.2.1 修改nameServer Jvm內存配置1.2.2 修改broker參數 1.3 啟動1.3.1 啟動NameServer1.3.2 啟動Broker1.3.3 測試是否啟動成功1.3.3.1 測試消息發送1.3.3.2 測試消息接收1.3.3.3 Java程…

數據結構——配對堆

引入 配對堆是一個支持插入&#xff0c;查詢/刪除最小值&#xff0c;合并&#xff0c;修改元素等操作的數據結構&#xff0c;是一種可并堆。有速度快和結構簡單的優勢&#xff0c;但由于其為基于勢能分析的均攤復雜度&#xff0c;無法可持久化。 定義 配對堆是一棵滿足堆性質…

C語言暑假刷題沖刺篇——day1

目錄 一、選擇題 二、編程題 &#x1f388;個人主頁&#xff1a;庫庫的里昂 &#x1f390;CSDN新晉作者 &#x1f389;歡迎 &#x1f44d;點贊?評論?收藏?收錄專欄&#xff1a;C語言每日一練 ?其他專欄&#xff1a;代碼小游戲C語言初階&#x1f91d;希望作者的文章能對你…

問道管理:網上如何打新股?

隨著資本市場的不斷敞開&#xff0c;越來越多的人開始重視股票市場&#xff0c;并想經過網上打新股來取得更大的出資收益。但是&#xff0c;網上打新股的辦法并不簡略&#xff0c;怎樣才能成功地打新股呢&#xff1f;本文將從多個角度剖析&#xff0c;協助廣闊出資者處理這一問…