документ.тело.scrollTop Firefox возвращает 0: только JS
любые альтернативы в чистом javascript?
следующие работы в opera, chrome и safari. Еще не протестированы на explorer:
http://monkey-me.herokuapp.com
https://github.com/coolcatDev/monkey-me-heroku/blob/master/static/js/myscripts.js
при загрузке страницы следует прокрутить вниз до div '.содержание:
var destiny = document.getElementsByClassName('content');
var destinyY = destiny[0].offsetTop;
scrollTo(document.body, destinyY, 200);
function scrollTo(element, to, duration) {
if (duration <= 0) return;
var difference = to - element.scrollTop;
var perTick = difference / duration * 2;
setTimeout(function() {
element.scrollTop = element.scrollTop + perTick;
scrollTo(element, to, duration - 2);
}, 10);
};
3 ответов:
попробуйте использовать этот:
document.documentElement.scrollTop. Если я правdocument.body.scrollTopустарела.обновление
похоже, что Chrome не играет вместе с ответом, чтобы быть безопасным, как предложил @Nikolai Mavrenkov в комментариях:
window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0Теперь все браузеры должны быть закрыты.
вместо если условия, есть более простой способ получить правильный результат, используя что-то вроде этого логического выражения.
var bodyScrollTop = document.documentElement.scrollTop || document.body.scrollTop;обе части возвращают ноль по умолчанию, поэтому, когда ваш свиток находится в нулевом положении, это вернет ноль, как и ожидалось.
bodyScrollTop = 0 || 0 = 0на странице-прокрутка одна из этих частей вернет ноль, а другая вернет некоторое число больше нуля. Обнуленное значение принимает значение false, а затем логическое или
||будет возьмите другое значение в качестве результата (например. ваш ожидаемый scrollTop и 300).Firefox-подобные браузеры увидят это выражение как
bodyScrollTop = 300 || 0 = 300а остальные браузеры видят
bodyScrollTop = 0 || 300 = 300который снова дает такой же и правильный результат.
на самом деле, это все о
something || nothing = something:)
стандарт
document.documentElementи это используется FF и IE.WebKit использует
document.bodyи не мог использовать стандарт из-за жалоб на обратную совместимость, если они изменились на стандарт, этот пост объясняет это красивоhttps://miketaylr.com/posts/2014/11/document-body-scrolltop.html
есть новое свойство на документе, который WebKit теперь поддерживает
https://developer.mozilla.org/en/docs/Web/API/document/scrollingElement
Так что это приведет вас к нужному элементу
var scrollingElement = document.scrollingElement || document.documentElement; scrollingElement.scrollTop = 100;и есть полифилл тоже
Comments