document.body.scrollTop 兼容問題

1.?各瀏覽器下 scrollTop的差異

IE6/7/8:

對于沒有doctype聲明的頁面里可以使用document.body.scrollTop來獲取 scrollTop高度

對于有doctype聲明的頁面則可以使用document.documentElement.scrollTop;


Safari:

safari 比較特別,有自己獲取scrollTop的函數 :window.pageYOffset ;

Firefox,Chrome IE9+:

火狐谷歌等等相對標準些的瀏覽器就省心多了,直接用document.documentElement.scrollTop ;

2.?獲取scrollTop值

完美的獲取scrollTop 賦值短語 :

var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;

通過這句賦值就能在任何情況下獲得scrollTop 值。

仔細觀察這句賦值,你發現啥了沒??

沒錯, 就是window.pageYOffset? (Safari)?? 被放置在 || 的中間位置。

因為當數字0undefine進行或運算時,系統默認返回最后一個值。

alert(undefined || 0);? -------0

alert( 0 || undefined);? -------undefined

即或運算中 0 == undefine ;

當頁面滾動條剛好在最頂端,即scrollTop值為 0 時。

? IE 下 window.pageYOffset? (Safari) 返回為 undefine ,此時將window.pageYOffset? (Safari) 放在或運算最后面時, scrollTop 返回 undefine ,? undefine 用在接下去的運算就會報錯。

而其他瀏覽器 無論 scrollTop 賦值或運算順序如何都不會返回 undefine.? 可以安全使用..

不過最后總結出來這句實驗過OK,大家放心使用;

var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;


DTD相關說明:

頁面具有 DTD,或者說指定了 DOCTYPE 時,使用 document.documentElement。

頁面不具有 DTD,或者說沒有指定了 DOCTYPE,時,使用 document.body。

在 IE 和 Firefox 中均是如此。

為了兼容,不管有沒有 DTD,可以使用如下代碼:

var scrollTop = window.pageYOffset? //用于safari

|| document.documentElement.scrollTop

|| document.body.scrollTop

|| 0;

documentElement 和 body 相關說明:

body是DOM對象里的body子節點,即 標簽;

documentElement 是整個節點樹的根節點root,即 標簽;

DOM把層次中的每一個對象都稱之為節點,就是一個層次結構,你可以理解為一個樹形結構,就像我們的目錄一樣,一個根目錄,根目錄下有子目錄,子目錄下還有子目錄。

以HTML超文本標記語言為例:整個文檔的一個根就是,在DOM中可以使用document.documentElement來訪問它,它就是整個節點樹的根節點。而body是子節點,要訪問到body標簽,在腳本中應該寫:document.body。


抄一抄,總會有提高!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 各瀏覽器下 scrollTop的差異 IE6/7/8: 對于沒有doctype聲明的頁面里可以使用 doc...
    半塊蘋果閱讀 1,882評論 0 0
  • 一、JS前言 (1)認識JS 也許你已經了解HTML標記(也稱為結構),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,798評論 0 8
  • 轉載請聲明出處 博客原文 隨手翻閱以前的學習筆記,順便整理一下放在這里,方便自己復習,也希望你有也有幫助吧 第一課...
    前端進階之旅閱讀 12,749評論 13 94
  • 本文是針對剛學編程的小白,都是一些基礎知識,如果想了解更多深層一點的東西,歡迎移步本人博客!! 博客地址 點擊跳轉...
    西巴擼閱讀 611評論 0 2
  • 給茉茉穿衣服的時候,我交代她爸爸,上午看好寶寶,他爸爸生氣說說要去加班,我說加班帶著她,茉茉仰著臉問我,媽媽、你去...
    飄心獄閱讀 286評論 0 0