JavaScript 元素距離視窗頂部的距離
在實際操作中可能需要獲取元素距離視窗頂部的距離,圖示如下:
比如我們想獲取js教程元素距離視窗頂部的距離。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> * { margin:0px; padding:0px; } body { height:1500px; } #box { width:200px; height:100px; background-color:blue; padding:50px; margin:30px; } #ant { width:100px; height:50px; text-align:center; line-height:50px; background-color:red; } </style> <script> window.onload = () => { let obox = document.getElementById("box"); let oant = document.getElementById("ant"); let obt = document.getElementById("bt"); let sp = document.documentElement.scrollTop || document.body.scrollTop; let getPoint = (obj) => { let t = obj.offsetTop; while (obj = obj.offsetParent) { t += obj.offsetTop; } return t; } obt.onclick = () => { oant.innerHTML = getPoint(oant) - sp; } } </script> </head> <body> <div id="box"> <div id="ant"></div> </div> <input type="button" id="bt" value="檢視效果"/> </body> </html>
上面程式碼實現了我們的要求,下面介紹一下它的原理與實現過程。
一.實現原理:
ant的距離視窗頂部的尺寸,實質就是ant距離文件頂部的尺寸-文件向上滾動的尺寸。
上面這句話是核心原理,下面看實現過程。
二.實現過程:
[CSS] 純文字檢視 複製程式碼* { margin:0px; padding:0px; }
將所有元素的外邊距和內邊距設定為0。
[CSS] 純文字檢視 複製程式碼body { height:1500px; }
設定body的高度為1500px,這樣就出現垂直滾動條,可以拖動滾動條進行測試。
[JavaScript] 純文字檢視 複製程式碼window.onload = () => { //code }
當文件內容完全載入完畢再去執行函式中的程式碼。
[JavaScript] 純文字檢視 複製程式碼let obox = document.getElementById("box"); let oant = document.getElementById("ant"); let obt = document.getElementById("bt");
獲取指定id的元素物件。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let sp = document.documentElement.scrollTop || document.body.scrollTop;
獲取頁面向上滾動的尺寸,做了一下瀏覽器相容性處理。
[JavaScript] 純文字檢視 複製程式碼let getPoint = (obj) => { //code }
此函式可以獲取指定元素物件obj距離body頂部的距離。
[JavaScript] 純文字檢視 複製程式碼let t = obj.offsetTop; while (obj = obj.offsetParent) { t += obj.offsetTop; } return t;
obj.offsetTop獲取的值是距離obj.offsetParent返回元素頂部的尺寸,obj.offsetParent並不一定是body,所以要一層一層的遞迴,將距離之和相加。
[JavaScript] 純文字檢視 複製程式碼obt.onclick = () => { oant.innerHTML = getPoint(oant) - sp; }
點選按鈕將距離寫入div中。
getPoint(oant) - sp,元素距離body頂部的距離減去頁面向上滾動的尺寸,就是元素距離視窗頂部的距離。
此時body的外邊距為0,否則不準確。
三.相關閱讀:
(1).箭頭函式參閱JavaScript 箭頭函式介紹一章節。
(2).scrollTop參閱JavaScript scrollTop一章節。
(3).offsetTop參閱JavaScript offsetTop一章節。
(4).offsetParent參閱JavaScript offsetParent一章節。
(5).innerHTML參閱JavaScript innerHTML 屬性一章節。
相關文章
- JavaScript獲取元素距離文件頂部的距離JavaScript
- 原生JS獲取DOM 節點到瀏覽器頂部的距離或者左側的距離JS瀏覽器
- 獲取DOM元素到頁面頂部的距離,親測有效版本(轉載)
- 馬氏距離與歐氏距離
- 【Python】距離Python
- 編輯距離及編輯距離演算法演算法
- 曼哈頓距離與切比雪夫距離
- vue js 獲取滾動距離 以及 返回頂部按鈕VueJS
- 最小距離分類器,互動式選取影像樣本分類資料,進行最小距離分類(實現歐式距離,馬氏距離,計程距離)
- Laravel 距離排序Laravel排序
- unit原子距離
- 餘弦距離
- 馬氏距離
- 曼哈頓距離與切比雪夫距離的互化
- milvus 使用 l2 歐式距離計算向量的距離,計算出來的距離的最大值是多少?
- 【DP】編輯距離
- 距離度量學習
- CSS3元素水平運動指定距離CSSS3
- 距離容差來源
- 461. 漢明距離
- 漢明距離(Hamming distance)
- 編輯距離演算法演算法
- LeetCode 461. 漢明距離LeetCode
- LeetCode72編輯距離LeetCode
- LeetCode 834 樹中距離之和LeetCode
- 經緯度距離換算
- 線性dp:編輯距離
- 距離-有這麼多類
- 902.最短編輯距離
- ggplot2中繪圖設定x軸、y軸名稱距離框線的距離繪圖
- 你離ELK只有一句docker-compose的距離Docker
- Levenshtein:計算字串的編輯距離字串
- vscode開啟關閉編輯區域頂部固定區域 頂部有一段行數距離高度 StickyScrollVSCode
- 45.LeetCode461. 漢明距離LeetCode
- 動態規劃-編輯距離動態規劃
- 【scipy 基礎】--正交距離迴歸
- opencv距離變換函式distanceTransformOpenCV函式ORM
- 優劣解距離法Topsis模型模型