Подтвердить что ты не робот

Корпус Chrome 61 не прокручивает

Кто-нибудь знает, почему назначение scrollTop в элементе body больше не работает?

например: document.body.scrollTop = 200

заставляет документ не прокручиваться.

Причина: Chrome наконец-то сделал прокрутку spec-совместимого в версии 61

Решение: используйте scrollingElement

Обновить пример до:

var scrollNode = document.scrollingElement ? 
                 document.scrollingElement : document.body;
scrollNode.scrollTop = 200;
4b9b3361

Ответ 1

Решение, описанное в конце этого вопроса (проверка на document.scrollingElement или возврат к document.body), не будет работать на IE, поскольку он не поддерживает document.scrollingElement (docs), а в IE элемент прокрутки является элементом HTML.

Я бы предположил, что лучшим решением для этого будет что-то вроде:

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

Что должно работать для всех современных браузеров.


В качестве побочного элемента интересно учесть, что свойство scrollingElement, похоже, было добавлено с единственной целью сделать его таким, чтобы нам не нужны проверки/резервные копии для получения элемента прокрутки корня, но из-за большего количества несовместимости браузеров, нам все равно нужна проверка/резервное копирование, чтобы использовать scrollingElement.

Не нравится ли веб-разработчик?

Ответ 2

Закончилось добавление этого кода в документ, готово и все работает. Кроме того, у меня были проблемы с некоторыми всплывающими подсказками, и этот код исправил это:

    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;
        }
    };

Надеюсь, это поможет вам.