web-dev-qa-db-ja.com

body.scrollTopが推奨されないのはなぜですか?

そうみたいです body.scrollTop(およびbody.scrollLeft)は、ES5 strict-modeでは非推奨です。これらのプロパティを他のDOMElementsで使用しても大丈夫と思われる場合、この理由は何ですか?

背景情報:

これらのいずれかが実際に変更されるまで、scrollTopのすべての祖先のelement値を増加(または指定どおりに減少)しようとする関数があります。 strict-modeで苦情を続けるために、親のチェーンが上に移動するときにbody要素を特にチェックする必要があるかどうか疑問に思っています。

[明らかに、bodydocument.body]

35
Himanshu P

推奨されないのはChrome自体の不正な動作であり、作成者に依存をやめるよう警告しています。

スクロールビューポートは、標準モードではdocument.documentElement<html>)、互換モードでは<body>で表されます 。 ( Quirksモード Navigator 4およびExplorer 5のドキュメントレンダリングをエミュレートします。)

Chromeはbody.scrollTopを使用して、bothモードでビューポートのスクロール位置を表しますが、これは誤りです。 彼らはこれを修正したい のように聞こえるので、彼らは著者に標準的な動作のためにスクリプトを書くことを奨励している。

コードを変更する必要はないと思います。標準モードでbody.scrollTopを使用しても、bodyのみのスクロール位置を表すことがわかっている限り、問題はありません(通常、bodyスクロールボックスを指定していない限り、0)。

コンソールでdocument.body.scrollTopを実行すると、警告を確認できます。

body.scrollTopは、strictモードでは非推奨です。 strictモードの場合はdocumentElement.scrollTopを使用し、quirksモードの場合はbody.scrollTopのみを使用してください。

41
sam

Chromeの新しいバージョンでコードが機能しなくなることに気付きました。 window.scrollYを使用して修正しました

前:

var scrollTop = document.body.scrollTop;

今:

var scrollTop = window.scrollY;

今では常に機能しています。より多くのドキュメントを見つけることができます こちら

また、私は使用していました:

document.body.scrollTop = 0;

今、私はそれを置き換えました:

window.scrollTo(0, 0);
9
Adrian