[英]Why is body.scrollTop deprecated?
似乎body.scrollTop
(和body.scrollLeft
)在 ES5 嚴格模式中已被棄用。 考慮到在其他DOMElement
上使用這些屬性似乎仍然可以,這是什么原因?
背景資料:
我有一個函數試圖增加(或減少,如指定) element
的所有祖先的scrollTop
值,直到其中一個實際發生變化。 我想知道,為了保持對嚴格模式的抱怨,我應該在父鏈向上移動時專門檢查body
元素。
[顯然, body
指的是document.body
]
不推薦使用的是 Chrome 自己的錯誤行為,他們警告作者停止依賴它。
滾動視口由標准模式下的document.documentElement
( <html>
) 或 quirks 模式下的<body>
。 ( Quirks 模式模擬 Navigator 4 和 Explorer 5 的文檔呈現。)
Chrome 在兩種模式下都使用body.scrollTop
來表示視口的滾動位置,這是錯誤的。 聽起來他們想要解決這個問題,所以他們鼓勵作者為標准行為編寫腳本。
我認為您不需要更改代碼。 在標准模式下使用body.scrollTop
並沒有錯,只要您理解它僅代表body
的滾動位置(通常為0
,除非您給body
一個滾動框)。
您可以通過在控制台中執行document.body.scrollTop
來查看警告:
body.scrollTop
在嚴格模式下已棄用。 請在嚴格模式下使用documentElement.scrollTop
,僅在 quirks 模式下使用body.scrollTop
。
我注意到我的代碼在較新版本的 Chrome 上停止工作。 我使用window.scrollY
修復了它
前:
var scrollTop = document.body.scrollTop;
現在:
var scrollTop = window.scrollY;
它現在一直有效。 您可以在此處找到更多文檔。
另外,我正在使用:
document.body.scrollTop = 0;
現在我將其替換為:
window.scrollTo(0, 0);
以下代碼適用於我在單擊事件觸發時將彈出窗口設置在正確位置,適用於所有瀏覽器。
var scrollTop = window.scrollY; //For all browsers.
var scrollTop = document.body.scrollTop; //This works for only IE Edge specific versions
scrollTop 指的是元素滾動了多少。 這意味着 body 不應該有 scrollTop 因為它從不滾動,body 有最頂部的滾動條,所以它的內容可以滾動但不是 body 本身。
此頁面上的最后一張圖片解釋了很多:
https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollTop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.