【JS場景題】判斷一個元素是否在可視區域內有哪些方法?

方法一、通過元素的位置信息和滾動條滾動的高度來判斷

前置知識

  • clientWidth: 元素的內容區域寬度加上左右內邊距寬度。
  • offsetTop: 元素的上外邊框至包含元素的上內邊框之間的像素距離。
  • document.documentElement.clientHeight: 獲取視口高度(不包含滾動條的隱藏高度)。
  • document.documentElement.scrollHeight:獲取瀏覽器窗口的總高度(包含滾動條的隱藏高度)。
  • document.documentElement.scrollTop: 獲取滾動條滾動的高度

代碼:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}.div {height: 2000px;}p {height: 200px;color: white;background-color: blueviolet;}</style>
</head>
<body><!-- 1. 通過元素的位置信息和滾動條滾動的高度來判斷 --><div class="div"></div><p>我出現啦</p><script>function isContain(dom) {// 獲取可視窗口的高度- 兼容寫法const screenHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;// 獲取滾動條滾動的高度const scrollTop = document.documentElement.scrollTop;// 獲取元素偏移的高度,就是距離可視窗口的偏移量const offsetTop = dom.offsetTop;return offsetTop - scrollTop <= screenHeight;}const p = document.querySelector('p')window.onscroll = () => {if (isContain(p)) {document.body.style.backgroundColor = 'blue'} else {document.body.style.backgroundColor = 'skyblue'}}</script>
</body>
</html>

方法二、通過getBoundingClientRect方法來獲取元素的位置信息,然后加以判斷

前置知識

  • getBoundingClientRect方法: DOM對象的一個方法,返回一個DOMRect對象。

  • 詳解:https://blog.csdn.net/weixin_61597234/article/details/134878221

  • 如果想要判斷子元素是否在可視區域內,只需要:

    • top >= 0
    • left >= 0
    • bottom <= 視口高度
    • right <= 視口寬度

代碼:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}.div {height: 2000px;}p {height: 200px;color: white;background-color: blueviolet;}</style>
</head>
<body><!-- 2. 通過getBoundingClientRect方法來獲取元素的位置信息,然后加以判斷 --><div class="div"></div><p>我出現啦</p><script>function isContain(dom) {const totalHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;const totalWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;// 當滾動條滾動時,top、left、bottom、right時刻會發生改變const { top, right, bottom, left } = dom.getBoundingClientRect();return left >= 0 && top >= 0 && right <= totalWidth && bottom <= totalHeight;}const p = document.querySelector('p')window.onscroll = () => {if (isContain(p)) {document.body.style.backgroundColor = 'red'} else {document.body.style.backgroundColor = 'green'}}</script>
</body>
</html>

方法三、通過交叉檢查器:Intersection Observer 來實現監聽(推薦)

前置知識

MDN: https://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API

代碼:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}.div {height: 2000px;}p {height: 200px;color: white;background-color: blueviolet;}</style>
</head>
<body><!-- 3. 通過交叉檢查器:Intersection Observer 來實現監聽 --><div class="div"></div><p>我出現啦</p><script>const p = document.querySelector('p')const observer = new IntersectionObserver(entries => {if (entries[0].isIntersecting) {document.body.style.backgroundColor = 'skyblue'} else {document.body.style.backgroundColor = 'orange'}}, {threshold: .2,  // 表示當子元素和父元素覆蓋多少時觸發回調函數。});observer.observe(p)</script>
</body>
</html>

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

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

相關文章

《Attention Is All You Need》解讀

一、簡介 “Attention Is All You Need” 是一篇由Ashish Vaswani等人在2017年發表的論文&#xff0c;它在自然語言處理領域引入了一種新的架構——Transformer。這個架構現在被廣泛應用于各種任務&#xff0c;如機器翻譯、文本摘要、問答系統等。Transformer模型的核心是“自…

小學vr虛擬課堂教學課件開發打造信息化教學典范

在信息技術的浪潮中&#xff0c;VR技術正以其獨特的魅力與課堂教學深度融合&#xff0c;引領著教育方式的創新與教學方法的變革。這一變革不僅推動了“以教促學”的傳統模式向“自主探索”的新型學習方式轉變&#xff0c;更為學生帶來了全新的學習體驗。 運用信息技術融合VR教學…

深度學習1

1.支持向量機Support Vector Machine&#xff08;SVM&#xff09;是一種對數據二分類的線性分類器&#xff0c;目的是尋找一個超平面對樣本進行分割&#xff0c;廣泛應用人像識別&#xff0c;手寫數字識別&#xff0c;生物信息識別。 二維空間分割界是一條直線&#xff0c;在三…

table = collections.defaultdict(list)申請的字典的類型是什么?

當你使用 collections.defaultdict(list) 來申請一個字典時&#xff0c;這個字典的類型是 defaultdict&#xff0c;但是其行為和表現方式在某些方面與普通的字典&#xff08;dict&#xff09;相似&#xff0c;主要區別在于它如何處理缺失的鍵。 defaultdict 是 Python 標準庫 …

【基礎篇】第4章 Elasticsearch 查詢與過濾

在Elasticsearch的世界里&#xff0c;高效地從海量數據中檢索出所需信息是其核心價值所在。本章將深入解析查詢與過濾的機制&#xff0c;從基礎查詢到復合查詢&#xff0c;再到全文搜索與分析器的定制&#xff0c;為你揭開數據檢索的神秘面紗。 4.1 基本查詢 4.1.1 Match查詢…

Java操作Excel最佳實踐

Java操作Excel最佳實踐 1、背景描述2、Apache POI簡介3、Java讀取Excel 1、背景描述 2、Apache POI簡介 官網&#xff1a;http://poi.apache.org/index.html 官方文檔&#xff1a;https://poi.apache.org/apidocs/index.html 3、Java讀取Excel 3.1、導入依賴 <dependency…

Qt——升級系列(Level Seven):事件、文件

目錄 Qt事件 事件介紹 事件的處理 按鍵事件 鼠標事件 定時器 事件分發器 事件過濾器 Qt文件 Qt文件概述 輸入輸出設備類 文件讀寫類 文件和目錄信息類 Qt事件 事件介紹 事件是應?程序內部或者外部產?的事情或者動作的統稱。在 Qt 中使??個對象來表??個事件。所有的 Qt …

工商業光伏項目如何快速開發?

一、前期調研與規劃 1、屋頂資源評估&#xff1a;詳細測量屋頂面積、承重能力及朝向&#xff0c;利用光伏業務管理軟件進行日照分析和發電量預測&#xff0c;確保項目可行性。 2、政策與補貼研究&#xff1a;深入了解當地政府對工商業光伏項目的政策支持和補貼情況&#xff0…

Java面試過程中遇到的問題

Java面試過程中遇到的問題 介紹工作經驗項目 介紹項目 為什么選用這個技術 報表服務怎么實現的 java框架 1、spring clound特性&#xff0c;組件有那些以及作用 springCloud是一套微服務組件&#xff0c; 常用的Eureka&#xff0c;Ribbon&#xff0c;Hystrix&#xff0c;Fe…

第三方支付平臺如何完美契合跨境電商?

在全球化的大潮中&#xff0c;跨境電商"Eurasia Boutique"的創始人艾米麗&#xff0c;帶著她的夢想和手工藝品&#xff0c;踏上了進入中國市場的征程。這是一個充滿挑戰和機遇的旅程&#xff0c;艾米麗和她的企業需要面對和解決一系列復雜的問題。 合規的門檻 艾米…

JVM原理(十四):JVM虛擬機運行時棧幀結構

Java虛擬機已方法作為最基本的執行單位。 棧幀&#xff1a;是支持Java虛擬機進行方法調用和方法執行背后的數據結構。 棧幀存儲了方法的 局部變量表、操作數棧、動態連接和放回地址等信息。 每一個方法的調用開始和執行結束&#xff0c;都對應著一個棧幀在虛擬機棧里面從入棧…

Linux文件與日志

目錄 1. Linux 文件系統 1.1 inode號 1.2 EXT類型文件恢復 1.3 xfs類型文件備份和恢復 2. 日志分析 2.1 日志類型 2.2日志配置文件 2.3 日志分析的重要性 在Linux系統中&#xff0c;文件和日志是管理和維護系統運行所不可或缺的。理解它們的工作原理和如何有效地管理和…

驅動開發:配置Visual Studio驅動開發環境

100編程書屋_孔夫子舊書網 配置驅動開發環境配置驅動開發模板配置驅動雙機調試 在正式開始驅動開發之前&#xff0c;需要自行搭建驅動開發的必要環境&#xff0c;首先我們需要安裝Visual Studio 2013這款功能強大的程序開發工具&#xff0c;在課件內請雙擊ISO文件并運行內部的…

2009-2024年第一季度上市公司華證ESG評級季度數據

2009-2024年第一季度上市公司華證ESG評級季度數據 1、時間&#xff1a;2009-2024年第一季度 2、指標&#xff1a;證券代碼、證券簡稱、評級日期、綜合評級、綜合得分、E評級、E得分、S評級、S得分、G評級、G得分、證監會行業&#xff08;新&#xff09;、同花順行業&#xff…

Visio框圖自動帶填充色原因及如何取消

0 Preface/Foreword Visio&#xff0c;Windows的一個流程圖&框圖制作工具。 1 新建Visio文件 1.1 圖形帶填充 新建Visio時候&#xff0c;如果選擇了模版&#xff0c;那么就后期使用的工具元素會自動填充。 帶來的弊端&#xff0c;在元素編輯文字時&#xff0c;如果此時不…

蘋果公司的Wifi定位服務(WPS)存在被濫用的風險

安全博客 Krebs on Security 2024年5月21日發布博文&#xff0c;表示蘋果公司的定位服務存在被濫用風險&#xff0c;通過 "竊取"WPS 數據庫&#xff0c;可以定位部隊行蹤。 相關背景知識 手機定位固然主要依賴衛星定位&#xff0c;不過在城市地區&#xff0c;密集的…

Perl 語言開發(五):循環語句

目錄 1. 循環語句概述 2. while 循環 2.1 基本語法 2.2 示例 2.3 無限循環 3. until 循環 3.1 基本語法 3.2 示例 3.3 無限循環 4. for 循環 4.1 基本語法 4.2 示例 4.3 嵌套循環 5. foreach 循環 5.1 基本語法 5.2 示例 5.3 遍歷哈希 6. 循環控制語句 6.1 …

新建Vue工程的幾種方法

文章目錄 使用CLI2 : vue-cli使用CLI3 : vue/cli使用 vue3構建 &#xff08;內置Vite&#xff09;直接使用Vite使用parcel (最少配置方案) 使用CLI2 : vue-cli vue-cli是針對構建vue的腳手架CLI2&#xff0c;只能新建vue2工程。 全局安裝vue-cli之后&#xff0c;構建vue2項目的…

03.C1W2.Sentiment Analysis with Na?ve Bayes

目錄 Probability and Bayes’ RuleIntroductionProbabilitiesProbability of the intersection Bayes’ RuleConditional ProbabilitiesBayes’ RuleQuiz: Bayes’ Rule Applied Nave Bayes IntroductionNave Bayes for Sentiment Analysis P ( w i ∣ c l a s s ) P(w_i|clas…

大數據領域的深度分析——AI是在幫助開發者還是取代他們?

在大數據領域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;的應用正在迅速擴展&#xff0c;改變了數據科學家和開發者的工作方式。本文將從大數據的專業視角&#xff0c;探討AI工具在這一領域的作用&#xff0c;以及它們是如何幫助開發者而非取代他們的。 1. 大數據…