Корпус Chrome 61 не прокручивает
Кто-нибудь знает, почему назначение scrollTop
в элементе body больше не работает?
например:
document.body.scrollTop = 200
заставляет документ не прокручиваться.
Причина: Chrome наконец-то сделал прокрутку spec-совместимого в версии 61
Решение: используйте scrollingElement
Обновить пример до:
var scrollNode = document.scrollingElement ?
document.scrollingElement : document.body;
scrollNode.scrollTop = 200;
Ответы
Ответ 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;
}
};
Надеюсь, это поможет вам.