Jawaban untuk 2018 :
Cara terbaik untuk melakukan hal-hal seperti itu adalah dengan menggunakan Intersection Observer API .
Intersection Observer API menyediakan cara untuk secara asinkron mengamati perubahan di persimpangan elemen target dengan elemen leluhur atau dengan viewport dokumen tingkat atas.
Secara historis, mendeteksi visibilitas suatu elemen, atau visibilitas relatif dari dua elemen dalam hubungannya satu sama lain, merupakan tugas yang sulit karena solusinya tidak dapat diandalkan dan cenderung menyebabkan peramban dan situs yang diakses pengguna menjadi lamban. Sayangnya, ketika web telah matang, kebutuhan akan informasi semacam ini telah berkembang. Informasi titik-temu diperlukan karena berbagai alasan, seperti:
- Pemuatan gambar atau konten lain dengan malas seperti halaman digulir.
- Menerapkan situs web "pengguliran tak terbatas", di mana semakin banyak konten dimuat dan ditampilkan saat Anda menggulir, sehingga pengguna tidak perlu membolak-balik halaman.
- Pelaporan visibilitas iklan untuk menghitung pendapatan iklan.
- Memutuskan apakah akan melakukan tugas atau proses animasi berdasarkan pada apakah pengguna akan melihat hasilnya atau tidak.
Menerapkan deteksi persimpangan di masa lalu melibatkan event handler dan loop memanggil metode seperti Element.getBoundingClientRect () untuk membangun informasi yang diperlukan untuk setiap elemen yang terpengaruh. Karena semua kode ini berjalan di utas utama, bahkan salah satunya dapat menyebabkan masalah kinerja. Ketika sebuah situs dimuat dengan tes-tes ini, semuanya bisa menjadi sangat buruk.
Lihat contoh kode berikut:
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);
Sebagian besar browser modern mendukung IntersectionObserver , tetapi Anda harus menggunakan polyfill untuk kompatibilitas ke belakang.
element
dandocument.body
hanya contoh). Lihat howtocreate.co.uk/tutorials/javascript/browserwindow untuk detailnya.