JS властивість Event.wheel


Загальний опис

Подія wheel спрацьовує при прокручуванні колеса миші або використанні трекпада. Ця подія надає програмісту можливість реагувати на прокрутку в будь-якому напрямку: вертикально або горизонтально. Вона може бути корисною для створення кастомних інтерфейсів або покращення стандартної прокрутки на сторінці, наприклад, зміни масштабу контенту або керування анімаціями.

Щоб використовувати подію wheel, можна додати обробник події до елемента:

const element = document.querySelector('#scrollable');
element.addEventListener('wheel', (event) => {
  console.log(`Прокручено на: ${event.deltaY}`);
});

Об'єкт події wheel містить кілька важливих властивостей, які можна використовувати для аналізу прокрутки. Наприклад, deltaY показує величину вертикальної прокрутки (від'ємне значення вказує на прокрутку вгору, додатне — вниз). deltaX відповідає за горизонтальну прокрутку.

За допомогою події wheel можна також керувати поведінкою сторінки при прокручуванні. Наприклад, щоб блокувати стандартну прокрутку сторінки, можна використовувати event.preventDefault():

element.addEventListener('wheel', (event) => {
  event.preventDefault();  // Блокує стандартну прокрутку
  // Кастомна логіка
});

Якщо необхідно збільшити чи зменшити чутливість до прокрутки, можна використовувати значення event.deltaMode. Наприклад, якщо deltaMode дорівнює 0, прокрутка здійснюється у пікселях, тоді як інші значення можуть означати прокрутку по рядках або сторінках.

Подію wheel часто використовують для масштабування контенту або керування кастомними ефектами прокрутки, зокрема для інтерактивних сторінок, слайдерів та інших елементів з унікальними інтерфейсними рішеннями.

автор: Bond

Порада

Майте на увазі, що подія wheel може спрацьовувати дуже часто (кілька разів на секунду). Якщо виконуєте важкі операції при прокручуванні, використовуйте техніки оптимізації, такі як дебаунсинг або тротлінг.

автор: Bond
Порада

Подія wheel надає можливість не тільки реагувати на прокрутку мишею, але й на подібні жести на трекпадах. Переконайтесь, що ваша логіка коректно працює для обох типів пристроїв.

автор: Bond
Порада

Використовуйте event.deltaX і event.deltaY для розрізнення вертикальної та горизонтальної прокрутки, особливо якщо ви працюєте з контентом, що може прокручуватись в обох напрямках, як у випадку зі слайдерами або складними макетами.

автор: Bond

Синтаксис

element.addEventListener('wheel', function(event) {
  // Дії при прокручуванні
});

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
66 57 11.1 53 16
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
66 66 57 11.3
Підтримка: серверні переглядачі
Переглядач Node.js Deno
15.0.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі обробник події wheel використовується для зміни масштабу елемента. Прокрутка вниз збільшує масштаб, а прокрутка вгору зменшує його. Це корисно для реалізації кастомного масштабування зображень або інших елементів на сторінці.

HTML

<div id="zoomable">Демонстраційний елемент</div>

JS

const zoomableElement = document.querySelector('#zoomable');
let scale = 1;

zoomableElement.addEventListener('wheel', (event) => {
  event.preventDefault();
  scale += event.deltaY * -0.01;  // Збільшуємо або зменшуємо масштаб
  scale = Math.min(Math.max(.125, scale), 4);  // Обмежуємо масштаб
  zoomableElement.style.transform = `scale(${scale})`;
});
автор: Bond

Цей приклад показує, як перетворити вертикальну прокрутку на горизонтальну. Використовується значення event.deltaY для управління горизонтальною прокруткою елемента. Це може бути корисним для горизонтальних галерей або слайдерів, де користувачі можуть прокручувати вміст мишею або трекпадом.

HTML

<div id="scroller" class="scroll-demo">
    <div class="scroll-inner">Прокручуваний вміст</div>
</div>

CSS

.scroll-demo {
    width: 220px;
    height: 110px;
    overflow: auto;
    border: 1px solid #0172ad;
}

.scroll-inner {
    width: 600px;
    height: 400px;
    background: linear-gradient(135deg, #eef6ff, #0172ad);
    padding: 8px;
}

JS

const horizontalScroller = document.querySelector('#scroller');

horizontalScroller.addEventListener('wheel', (event) => {
  event.preventDefault();
  horizontalScroller.scrollLeft += event.deltaY;  // Прокручуємо горизонтально замість вертикальної прокрутки
});
автор: Bond

У цьому прикладі користувач може змінювати розмір зображення за допомогою прокручування миші. При кожному прокручуванні подія wheel коригує масштаб зображення, збільшуючи або зменшуючи його. Масштаб обмежений в межах від 0.5x до 3x для запобігання надто великих або малих значень. Кнопка "Скинути масштаб" дозволяє швидко повернутися до початкового значення масштабу (1x).

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід