| 選擇器 | 對象本質 | scrollTop含義 | 適用場景 |
|---|---|---|---|
$(window) | Window對象(BOM) | 視口相對文檔頂部滾動距離(pageYOffset) | 監聽窗口滾動、懸浮導航、懶加載觸發 |
$('body,html') | Document根元素(DOM) | 文檔流滾動距離,受DOCTYPE影響 | 頁面內錨點跳轉、平滑滾動動畫animate({scrollTop}) |
<!DOCTYPE html>):html元素是滾動容器,body.scrollTop === 0恒成立。body是滾動容器,html.scrollTop === 0。因此$('body,html')雙選擇器兼容兩種模式,動畫時同時設置兩者確保生效。
// jQuery offset 模塊相關邏輯
function getScrollTop(elem) {
var win = getWindow(elem); // 判斷是否為window
return win ?
('pageYOffset' in win) ? win.pageYOffset : // 現代瀏覽器
(document.documentElement.scrollTop || document.body.scrollTop) : // 兼容舊IE
elem.scrollTop; // 普通元素
}
$(window).scrollTop()(推薦,語義清晰)。$('html, body').animate({scrollTop: targetOffset})。elem.getBoundingClientRect().top < window.innerHeight(無需scrollTop)。$(window)調用.animate({scrollTop}) —— Window對象無scrollTop屬性設置器,動畫無效。window.scrollTop可能不準確(視口縮放),優先用document.scrollingElement.scrollTop(現代標準)。