Как получить позицию полосы прокрутки с помощью Javascript?
Я пытаюсь определить положение полосы прокрутки браузера с помощью JavaScript, чтобы решить, где на странице находится текущее представление. Я предполагаю, что я должен определить, где находится большой палец на дорожке, а затем высоту большого пальца в процентах от общей высоты дорожки. Я слишком усложняю его, или JavaScript предлагает более простое решение, чем это? Есть идеи по коду?
6 ответов
можно использовать element.scrollTop
и element.scrollLeft
чтобы получить вертикальное и горизонтальное смещение, соответственно, которая была прокручена. element
может быть document.body
Если вы заботитесь о всей странице. Вы можете сравнить его с element.offsetHeight
и element.offsetWidth
(опять-таки, element
может быть органа), если вам нужны проценты.
Я сделал это <div>
на Chrome.
элемент.scrollTop - это пиксели, скрытые в верхней части из-за прокрутки. Без прокрутки его значение равно 0.
элемент.scrollHeight - это пиксели всего div.
элемент.clientHeight - это пиксели, которые вы видите в вашем браузере.
var a = element.scrollTop;
будет позиция.
var b = element.scrollHeight - element.clientHeight;
будет максимум значение scrollTop.
var c = a / b;
будет процент прокрутки [от 0 до 1].
document.getScroll = function() {
if (window.pageYOffset != undefined) {
return [pageXOffset, pageYOffset];
} else {
var sx, sy, d = document,
r = d.documentElement,
b = d.body;
sx = r.scrollLeft || b.scrollLeft || 0;
sy = r.scrollTop || b.scrollTop || 0;
return [sx, sy];
}
}
возвращает массив с двумя целыми числами - [scrollLeft, scrollTop]
это так:)
window.addEventListener("scroll", function (event) {
var scroll = this.scrollY;
console.log(scroll)
});
Если вы используете jQuery, для вас есть идеальная функция: .scrollTop()
doc здесь ->http://api.jquery.com/scrollTop/
Примечание: Вы можете использовать эту функцию для извлечения или установки установки.
см. также:http://api.jquery.com/?s=scroll
ответ на 2018:
лучший способ сделать такие вещи - использовать API наблюдателя пересечения.
API наблюдателя пересечения предоставляет способ асинхронного наблюдения изменения в пересечении целевого элемента с предком элемент или с видовым окном документа верхнего уровня.
исторически, обнаружение видимости элемента или относительного видимость двух элементов в отношении друг к другу, был трудная задача, решения которой ненадежны и подвержены вызывая браузер и сайты, к которым пользователь обращается, чтобы стать вялый. К сожалению, по мере того, как сеть созрела, необходимость в этом вид информации вырос. Информация о пересечении необходима для много причин, таких как:
- Lazy - загрузка изображений или другого контента в виде прокрутки страницы.
- реализация веб-сайтов" бесконечная прокрутка", где все больше и больше контента загружается и отображается при прокрутке, так что пользователь не приходится листать страницы.
- отчетность о видимости рекламы для того, чтобы рассчитать доходы от рекламы.
- решение о том, выполнять ли задачи или анимационные процессы на основе того, будет ли пользователь видеть результат.
реализация обнаружения пересечений в прошлом событии обработчики и циклы, вызывающие такие методы, как Элемент.getBoundingClientRect() для создания необходимой информации для каждый затронутый элемент. Поскольку весь этот код работает в основном потоке, даже один из них может вызвать проблемы с производительностью. Когда сайт загруженные этими тестами, вещи могут стать совершенно уродливыми.
см. Следующий пример кода:
var options = { root: document.querySelector('#scrollArea'), rootMargin: '0px', threshold: 1.0 } var observer = new IntersectionObserver(callback, options); var target = document.querySelector('#listItem'); observer.observe(target);
Как поддержка браузеров не здорово, вы должны использовать IntersectionObserver polyfill.