中有所不同我試圖根據'document.documentElement.scrollTop
'值處理一些代碼。它在FF和IE中返回'348
',但在Chrome中返回'0
'。我需要做任何事情來克服這個問題嗎?document.documentElement.scrollTop返回值在Chrome
FF:
鉻:
document.documentElement.scrollTop
0
中有所不同我試圖根據'document.documentElement.scrollTop
'值處理一些代碼。它在FF和IE中返回'348
',但在Chrome中返回'0
'。我需要做任何事情來克服這個問題嗎?document.documentElement.scrollTop返回值在Chrome
FF:
鉻:
document.documentElement.scrollTop
0
嘗試獲得滾動的這種
window.pageYOffset || document.documentElement.scrollTop
有趣的事實:這並不總是在Windows Phone中的WebView中工作。神祕的邊緣情況下,但我剛剛抨擊。這些數字有時是不同的,有時候強調,而pageYOffset在它們出現時似乎是錯誤的。 – Aaron
document.body.scrollTop在Windows Phone上工作嗎? –
基於標準的方法是window.scrollY
。這受Chrome,Firefox,Opera,Safari和IE Edge或更高版本的支持。如果你只支持這些瀏覽器,你應該去這個屬性。
IE> = 9支持類似的屬性window.pageYOffset
,爲了兼容性返回與最近的瀏覽器中的window.scrollY
相同的返回值,雖然它在某些時候可能會被棄用。
使用document.documentElement.scrollTop
或document.body.scrollTop
的問題在於不需要在其中任何一個上定義滾動。例如,Chrome和Safari在<body>
元素上定義它們的滾動,而Firefox在document.documentElement
返回的<html>
元素上定義它。這不是標準化的,並且可能在未來版本的瀏覽器中發生變化。但是,如果scrollY
或pageYOffset
不存在,這是獲取滾動的唯一方法。
TL; DR:
window.scrollY || window.pageYOffset || document.body.scrollTop + (document.documentElement && document.documentElement.scrollTop || 0)
你可以只使用如下因素代碼來修復錯誤!
let scrollHeight = document.body.scrollTop || document.documentElement.scrollTop;
console.log(`scrollHeight = ${scrollHeight}`);
/*
this comment just using for testing the scroll height!
but in this iframe it deon't work at all!
So, you can try it out using Chrome console!
*/
的document.body.scrollTop;
//適用於Chrome,Safari和Opera
document.documentElement.scrollTop;
//除非另有說明,否則Firefox和IE會將溢出置於該級別。
因此,我們使用documentElement屬性爲這兩個瀏覽器
參考鏈接:
http://www.w3schools.com/jsref/prop_element_scrolltop.asp
https://drafts.csswg.org/cssom-view/#dom-element-scrolltop
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTop
使用window.scrollY如果可能的話,它的設計是在瀏覽器中保持一致。如果您需要支持IE,那麼我推薦以下只使用window.scrollY
(如果可用):
typeof window.scrollY === "undefined" ? window.pageYOffset : window.scrollY
window.scrollY
將假評估,如果返回0,這樣window.scrollY || window.pageYOffset
在技術上檢查window.pageYOffset
每當window.scrollY
人0,如果window.pageYOffset
不等於0,則顯然不理想。
另外請注意,如果您需要像常見情況那樣頻繁地獲取滾動值(每幀/每次滾動),則可能需要檢查如果window.scrollY
被預先定義。我喜歡使用我寫的這個小幫手函數來完成這個功能,並且使用- 它應該可以在IE10中工作。
function registerScrollHandler (callback) {
"use strict"
var useLegacyScroll = typeof window.scrollY === "undefined",
lastX = useLegacyScroll ? window.pageXOffset : window.scrollX,
lastY = useLegacyScroll ? window.pageYOffset : window.scrollY
function scrollHandler() {
// get the values using legacy scroll if we need to
var thisX = useLegacyScroll ? window.pageXOffset : window.scrollX,
thisY = useLegacyScroll ? window.pageYOffset : window.scrollY
// if either the X or Y scroll position changed
if (thisX !== lastX || thisY !== lastY) {
callback(thisX, thisY)
// save the new position
lastX = thisX
lastY = thisY
}
// check again on the next frame
window.requestAnimationFrame(scrollHandler)
}
scrollHandler()
}
使用這樣的功能:
registerScrollHandler(function (x, y) {
/* your code here :) */
console.log("Scrolled the page", x, y)
})
嘗試'document.body.scrollTop' – Passerby
感謝@Passerby ..有其他的,這個沒有其他解決辦法?如果沒有,我必須這樣去。 – RGR
不是我所知道的......通常你可以使用'(document.documentElement.scrollTop || document.body.scrollTop)'。 – Passerby