Sử dụng window.scrollY nếu có thể, nó được thiết kế để được nhất quán trên các trình duyệt.Nếu bạn cần hỗ trợ IE, sau đó tôi muốn khuyên sau đây để chỉ sử dụng window.scrollY
nếu nó có sẵn:
typeof window.scrollY === "undefined" ? window.pageYOffset : window.scrollY
window.scrollY
sẽ được đánh giá là false nếu nó trả về 0, vì vậy làm window.scrollY || window.pageYOffset
về mặt kỹ thuật sẽ kiểm tra window.pageYOffset
bất cứ khi nào window.scrollY
là 0, mà rõ ràng không phải là lý tưởng nếu window.pageYOffset
cũng không bằng 0.
Cũng lưu ý rằng nếu bạn cần thường xuyên cuộn giá trị (mỗi khung hình/cuộn) như thường lệ, bạn có thể muốn kiểm tra nếu window.scrollY
được xác định trước. Tôi thích sử dụng chức năng trợ giúp nhỏ này mà tôi đã viết để làm chính xác điều đó, cùng với việc sử dụng requestAnimationFrame
- nó sẽ hoạt động trong IE10 trở lên.
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()
}
Sử dụng các chức năng như thế này:
registerScrollHandler(function (x, y) {
/* your code here :) */
console.log("Scrolled the page", x, y)
})
Hãy thử 'document.body.scrollTop' – Passerby
Cảm ơn @Passerby .. là có bất kỳ giải pháp nào khác mà điều này? Nếu không, tôi phải đi bằng cách này. – RGR
Không phải là tôi biết ... Nói chung bạn có thể sử dụng '(document.documentElement.scrollTop || document.body.scrollTop)'. – Passerby