Примеры работы со "скроллом" на сайте с помощью jQuery
Скролл, или как мы чаще всего говорим "прокрутка" это просто движение по странице вверх или вниз. Это как бегунок на правой стороне экрана, который ты двигаешь вверх и вниз используя колесо мыши. С прокруткой можно взаимодействовать из jQuery в различных ситуациях и выполнять нужные Вам действия с элементами сайта.
Простые примеры использования jquery при скролле страницы
Рассмотрим несколько простых примеров, как можно взаимодействовать с прокруткой из jQuery для того, чтобы отследить позицию скролла.
Как узнать, что идёт прокрутка страницы
$(window).scroll(function() {
console.log('Вы прокрутили страницу!');
});
Когда страница прокручивается, функция внутри $(window).scroll(...) будет вызвана, и сообщение 'Вы прокрутили страницу!' будет отображено в консоли.
Как узнать, что скролл в самом верху
$(window).scroll(function() {
if ($(this).scrollTop() === 0){
console.log("Скролл в самом верху");
}
});
Этот код будет выводить сообщение "Скролл в самом верху" каждый раз, когда пользователь прокручивает страницу до самого верха.
Как узнать, что скролл в самом внизу
$(window).scroll(function() {
if ($(window).scrollTop() + $(window).height() === $(document).height()) {
console.log("Скролл в самом низу");
}
});
Этот код также слушает событие прокрутки окна (window), но в этот раз проверяется, достиг ли скролл самого низа страницы.
Как узнать, что скролл где-то в середине страницы
$(window).scroll(function() {
var windowMid = $(window).scrollTop() + $(window).height() / 2;
var documentHeight = $(document).height();
if (windowMid > documentHeight / 2 - 100 && windowMid < documentHeight / 2 + 100){
console.log("Скролл около середины страницы");
}
});
Этот код вновь использует событие scroll объекта window, но теперь он определяет, когда прокрутка окна находится около середины страницы.
Как узнать на сколько пикселей была прокручена страница
$(window).scroll(function() {
var scrollAmount = $(window).scrollTop();
console.log("Страница прокручена на " + scrollAmount + " пикселей");
});
Примеры выше показывают, как можно отследить позицию скролла в jQuery и уже исходя из этого, можно совершать какие-либо действия. Далее рассмотрим ещё несколько примеров.
Как можно взаимодействовать с элементами сайта при скролле
Несколько примеров для определения различных ситуаций при скролле сайта.
Как узнать, попал ли элемент в видимую зону экрана
$(window).on("scroll", function() {
var windowBottom = $(this).scrollTop() + $(this).height();
var elementPosition = $('#wrp').offset().top;
if (elementPosition <= windowBottom) {
console.log('Элемент #wrp находится в видимой зоне');
}
});
В данном примере можно узнать, попал ли элемент #wrp в видимую зону экрана. В консоли появится сообщение 'Элемент #wrp находится в видимой зоне' как только его верхняя часть появится на экране.
Как узнать, что элемент полность в зоне видимости
$(window).on("scroll", function() {
let windowTop = $(window).scrollTop();
let windowBottom = windowTop + $(window).height();
let elementTop = $('#wrp').offset().top;
let elementBottom = elementTop + $('#wrp').height();
if ((elementTop >= windowTop) && (elementBottom <= windowBottom)) {
console.log('Элемент #wrp полностью видим на экране');
}
});
Аналогично вышеприведённому примеру, но тут уже сообщение 'Элемент #wrp полностью видим на экране' появится только тогда, когда элемент станет полностью видим.
Как узнать, что элемент достигает верхней границы окна
$(window).scroll(function() {
var topElement = $('.your-element').offset().top - $(window).scrollTop();
if (topElement <= 0) {
console.log('Элемент достиг верха страницы');
}
});
Как узнать, что элемент достиг нижней части страницы
Хорошим тоном будет добавление проверки на существование элемента, что бы избавится от лишних выводов в консоли.
$(document).ready(function() {
$(window).scroll(function() {
let element = $('.your_element'); // замените .your_element на селектор вашего элемента
if (element.length) { // Проверим, существует ли элемент
let elementOffset = element.offset().top + element.outerHeight();
let windowScroll = $(window).scrollTop() + $(window).height();
if (windowScroll > elementOffset) {
console.log('Элемент коснулся нижней части страницы');
}
}
});
});
Как сделать плавающий блок в сайдбаре
// определение элемента
var floatBlock = $(".container_side");
// сохранение исходной позиции элемента
var originalPos = floatBlock.offset().top;
$(window).scroll(function() {
if ($(window).scrollTop() >= originalPos) {
floatBlock.css({"position":"fixed", "top":"30px"});
} else {
floatBlock.css("position","static");
}
});
Этот код можно использовать, чтобы "закрепить" блок на странице, когда пользователь прокручивает достаточно далеко. Также сохраняется исходная позиция блока, и при прокрутке вверх, блог останется на своём изначальном месте.