ドキュメントのスクロールまたはスクロール位置の取得に使うべき要素はブラウザによって差異があり、SafariやChromeなどのWebKit系がbody要素を、それ以外はhtml要素を使う必要があります。が、遂にChromeがChrome 61でhtml要素派に変わりました。これによってブラウザ判定でbody要素かhtml要素かを使い分けるという処理が動かなくなりました。
Chrome Platform Status : Interoperable body/documentElement scroll behavior
https://www.chromestatus.com/feature/6386758136627200
スクロール関連の仕様はCSS Object Modelのviewモジュールで定められていて、スクロール用の要素の取得にdocument.scrollingElement
属性が用意されています。ChromeではChrome 41から使えるようになっています1。結構前ですね。この属性は互換モードならbody要素を、そうでないならhtml要素を返すとなっているので、満を持して互換モードをやめたということなのだと思われます。
ということでスクロール用の要素の取得にはdocument.scrollingElement
属性を使いましょう。
が、MDNによると残念ながらまだIEが対応していないようです2。なのでそのまま使うのではなく、何らかの代替手段を用意する必要があります。以下のブログによると、document.scrollingElement
があればそれを、無い場合はWebKitならbody要素、それ以外はdocument.documentElement
を使うみたいなことをすれば良いようです。
Dev.Opera — Fixing the scrollTop bug
https://dev.opera.com/articles/fixing-the-scrolltop-bug/