web-dev-qa-db-ja.com

Chrome 61本文はスクロールしません

Body要素にscrollTopを割り当てることが機能しなくなった理由を誰もが知っていますか?

例:document.body.scrollTop = 200

文書をスクロールしません。

原因:Chrome 最終的にスクロール仕様に準拠 バージョン61

ソリューションscrollingElement を使用

例を次のように更新します。

var scrollNode = document.scrollingElement ? 
                 document.scrollingElement : document.body;
scrollNode.scrollTop = 200;
53
Dave Tapuska

この質問の最後に記載されているソリューション(document.scrollingElementの確認またはdocument.bodyへのフォールバック)は、document.scrollingElementdocs )、IEでは、スクロール要素はHTML要素です。

したがって、これに対するより良い解決策は次のようなものになることをお勧めします。

var scrollNode = document.scrollingElement || document.documentElement;

これは、最新のすべてのブラウザーで機能するはずです。


補足として、scrollingElementプロパティは、do n'tが必要になるように、それを作成するという唯一の目的のために追加されたように思われることを考慮するのは興味深いです。ルートスクロール要素を取得するためのチェック/フォールバックがありますが、ブラウザーの非互換性がより多くなるため、scrollingElementを使用するには、チェック/フォールバックが必要です。

Web開発は面白くないですか?

14
Pudge601

こんにちは、私は同様の問題を抱えており、このコードをドキュメントに追加する準備ができており、動作します。また、私は見当違いのいくつかのツールチップに問題があり、このコードはそれを修正します。

    window.onload = function () {
        var GetDocumentScrollTop = function () {
            var isScrollBodyIE = ASPx.Browser.IE && ASPx.GetCurrentStyle(document.body).overflow == "hidden" && document.body.scrollTop > 0;
            if (ASPx.Browser.WebKitFamily || isScrollBodyIE) {
                if (ASPx.Browser.MacOSMobilePlatform)
                    return window.pageYOffset;
                else if (ASPx.Browser.WebKitFamily)
                    return document.documentElement.scrollTop || document.body.scrollTop;
                return document.body.scrollTop;
            }
            else
                return document.documentElement.scrollTop;
        };
        var _aspxGetDocumentScrollTop = function () {
            if (__aspxWebKitFamily) {
                if (__aspxMacOSMobilePlatform)
                    return window.pageYOffset;
                else
                    return document.documentElement.scrollTop || document.body.scrollTop;
            }
            else
                return document.documentElement.scrollTop;
        }
        if (window._aspxGetDocumentScrollTop) {
            window._aspxGetDocumentScrollTop = _aspxGetDocumentScrollTop;
            window.ASPxClientUtils.GetDocumentScrollTop = _aspxGetDocumentScrollTop;
        } else {
            window.ASPx.GetDocumentScrollTop = GetDocumentScrollTop;
            window.ASPxClientUtils.GetDocumentScrollTop = GetDocumentScrollTop;
        }
    };

これがあなたを助けることを願っています。

感謝

0