Відповідь на 2018 рік :
Найкращий спосіб зробити подібні дії - це використовувати API Intersection Observer .
API спостереження перехрестя забезпечує спосіб асинхронного спостереження за змінами перетину цільового елемента з елементом предка або з вікном перегляду документа верхнього рівня.
Історично виявляти видимість елемента або відносну видимість двох елементів по відношенню один до одного було складним завданням, рішення якого було ненадійним і схильним до того, щоб браузер і веб-сайти, до яких користувач отримує доступ, стали млявими. На жаль, у міру дозрівання мережі Інтернет потреба в такому вигляді інформації зросла. Інформація про перетин потрібна з багатьох причин, наприклад:
- Ліниво завантажується зображення або інший вміст на сторінці, прокручується.
- Впровадження веб-сайтів "нескінченної прокрутки", де все більше вмісту завантажується та надається під час прокрутки, щоб користувачеві не довелося гортати сторінки.
- Звітність про видимість реклами з метою підрахунку доходів від реклами.
- Вирішення, виконувати завдання чи анімаційні процеси, залежно від того, побачить результат чи ні користувач.
Реалізація виявлення перетину в минулому включала оброблювачів подій та циклів виклику циклів, таких як Element.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 , однак для зворотної сумісності слід використовувати полі- заливку .
element
і цеdocument.body
були лише приклади). Докладніше див. У howtocreate.co.uk/tutorials/javascript/browserwindow .