-
Notifications
You must be signed in to change notification settings - Fork 5
IntersectionObserver
๋ฌดํ ์คํฌ๋กค ๊ตฌํ์ ํ๋ ์ค ์ ๋ณด๋ฅผ ์ฐพ์๋ณด๋ค๊ฐ Intersection Observer๋ฅผ ์๊ฒ ๋์๋ค.
The Intersection Observer API provides a way to asynchronously observe changes in the intersection of a target element with an ancestor element or with a top-level documentโs viewport.
Intersection Observer API๋ ํ๊ฒ ์๋ฆฌ๋จผํธ๊ฐ ์กฐ์ ์๋ฆฌ๋จผํธ, ๋๋ ์ต์์ ๋ฌธ์์ ๋ทฐํฌํธ(๋ธ๋ผ์ฐ์ ์์๋ ๋ณดํต ๋ธ๋ผ์ฐ์ ์ viewport)์ ๊ต์ฐจ์์ญ์์ ๋ฐ์ํ๋ ๋ณํ๋ฅผ ๋น๋๊ธฐ๋ก ๊ด์ฐฐํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
-
Lazy-loading of images or other content as a page is scrolled.
ํ์ด์ง ์คํฌ๋กค ์ ์ด๋ฏธ์ง๋ฅผ Lazy loadingํ ๋
-
Implementing "infinite scrolling" web sites, where more and more content is loaded and rendered as you scroll, so that the user doesn't have to flip through pages.
Infinite scrolling์ ํตํด ์คํฌ๋กค์ ํ๋ฉฐ ์๋ก์ด ์ฝํ ์ธ ๋ฅผ ๋ถ๋ฌ์ฌ ๋
-
Reporting of visibility of advertisements in order to calculate ad revenues.
๊ด๊ณ ์ ์์ต์ ๊ณ์ฐํ๊ธฐ ์ํด ๊ด๊ณ ์ ๊ฐ์์ฑ์ ์ฐธ๊ณ ํ ๋
-
Deciding whether or not to perform tasks or animation processes based on whether or not the user will see the result.
์ฌ์ฉ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ๊ฒ์ธ์ง์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์ ๋์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ๋
Intersection Observer API - Web APIs | MDN (mozilla.org)
const io = new IntersectionObserver(callback[, options]);
IntersectionObserver๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ๊ต์ฐจ๋์์ ๋ ์คํํ callback ํจ์์ ์ ํ์ ์ผ๋ก options๋ฅผ ๋๊ฒจ์ค ์ ์์ต๋๋ค.
callback
ํ๊ฒ ์๋ฆฌ๋จผํธ๊ฐ ๊ต์ฐจ๋์์ ๋ ์คํํ ํจ์
- entries: IntersectionObserverEntry ๊ฐ์ฒด์ ๋ฆฌ์คํธ. ๋ฐฐ์ด ํ์์ด๊ธฐ ๋๋ฌธ์ forEach๋ฅผ ์ฌ์ฉํด์ ์ฒ๋ฆฌํ ์๋ ์๋ค.
๋จ์ผ ํ๊ฒ์ผ ๊ฒฝ์ฐ ๋ฐฐ์ด์ธ ์ ์ ๊ณ ๋ คํด์ ์ฝ๋๋ฅผ ์์ฑํด์ผํ๋ค.
- observer: ์ฝ๋ฐฑํจ์๊ฐ ํธ์ถ๋๋ IntersectionObserver
options
-
root: ๊ต์ฐจ ์์ญ์ ๊ธฐ์ค์ด ๋ root ์๋ฆฌ๋จผํธ. obseve์ ๋์์ผ๋ก ๋ฑ๋กํ ์๋ฆฌ๋จผํธ๋ ๋ฐ๋์ ๋ฐ๋์ root์ ํ์ ์๋ฆฌ๋จผํธ์ฌ์ผ ํ๋ค.
default:
null(๋ธ๋ผ์ฐ์ ์ viewport)
-
rootMargin: root ์๋ฆฌ๋จผํธ์ ๋ง์ง ๊ฐ.
rootMargin ๊ฐ์ ๋ฐ๋ผ ๊ต์ฐจ ์์ญ์ด ํ์ฅ ๋๋ ์ถ์๋๋ค.
default:
'0px 0px 0px 0px'
-
threshold: 0.0๋ถํฐ 1.0 ์ฌ์ด์ ์ซ์ ํน์ ์ด ์ซ์๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด๋ก ํ์ผ ์๋ฆฌ๋จผํธ์ ๋ํ ๊ต์ฐจ ์์ญ ๋น์จ์ ์๋ฏธํ๋ค.
0.0์ ๊ฒฝ์ฐ ํ์ผ ์๋ฆฌ๋จผํธ๊ฐ ๊ต์ฐจ์์ญ์ ์ง์ ํ์ ์์ ์ด๊ณ 1.0์ ๊ฒฝ์ฐ ํ๊ฒ ์๋ฆฌ๋จผํธ ์ ์ฒด๊ฐ ๊ต์ฐจ ์์ญ์ ๋ค์ด์์ ์์ ์ด๋ค.
<div class="lazy-loading-example"> <img src="์ด๋ฏธ์ง URL" alt="image" class="image-default"> <img data-src="์ด๋ฏธ์ง URL" alt="image" class="image"> <img data-src="์ด๋ฏธ์ง URL" alt="image" class="image"> <img data-src="์ด๋ฏธ์ง URL" alt="image" class="image"> <img data-src="์ด๋ฏธ์ง URL" alt="image" class="image"> <img data-src="์ด๋ฏธ์ง URL" alt="image" class="image"> <img data-src="์ด๋ฏธ์ง URL" alt="image" class="image"> </div>
const options = { root: null, // null์ธ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ viewport rootMargin: '30px', threshold: 0 // ํ๊ฒ ์๋ฆฌ๋จผํธ๊ฐ ๊ต์ฐจ์์ญ์ ์ง์ ํ์ ๋, observe๊ฐ ๋ฐ์ํ๋ค. } const callback = (entries, observer) => { // ์ํ๋ ๋์ ์์ฑ entries.forEach(entry => { if (entry.isIntersecting) { // ๊ด์ฐฐ ๋์์ด viewport ์์ ๋ค์ด์จ ๊ฒฝ์ฐ entry.target.src = entry.target.dataset.src; observer.unobserve(entry.target); // target ๊ฐ์ ์ทจ์ } } } const io= new IntersectionObserver(callback, options); const images = document.querySelectorAll('.image'); images.forEach((image) => { io.observe(image); })
- ํ๊ฒ ์๋ฆฌ๋จผํธ์ ๋ํ IntersectionObserver๋ฅผ ๋ฑ๋กํ ๋(๊ด์ฐฐ์ ์์ํ ๋) ์ฌ์ฉํฉ๋๋ค.
- ํ๊ฒ ์๋ฆฌ๋จผํธ์ ๋ํ ๊ด์ฐฐ์ ๋ฉ์ถ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด Lazy-loading(์ง์ฐ ๋ก๋ฉ)์ ํ ๋๋ ํ ๋ฒ ์ฒ๋ฆฌ๋ฅผ ํ ํ์๋ ๊ด์ฐฐ์ ๋ฉ์ถฐ๋ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ฒ๋ฆฌ๋ฅผ ํ ํ ํด๋น ์๋ฆฌ๋จผํธ์ ๋ํดย
unobserve(targetElement)
์ ์คํํ๋ฉด ์ด ์๋ฆฌ๋จผํธ์ ๋ํ ๊ด์ฐฐ๋ง ๋ฉ์ถ ์ ์์ต๋๋ค.
- ๋ค์์ ์๋ฆฌ๋จผํธ๋ฅผ ๊ด์ฐฐํ๊ณ ์์ ๋, ์ด์ ๋ํ ๋ชจ๋ ๊ด์ฐฐ์ ๋ฉ์ถ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
-
IntersectionObserverEntry
ย ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค.
.....
๋ฐ๋๋ผ JS๋ก ๋ฌดํ์คํฌ๋กค ๊ตฌํ์ ์ํ ๋ฒ ์ด์ง ๊ณต๋ถ (velog.io)
Intersection Observer - ์์์ ๊ฐ์์ฑ ๊ด์ฐฐ | HEROPY
Intersection Observer API - Web APIs | MDN (mozilla.org)
Intersection Observer API์ ์ฌ์ฉ๋ฒ๊ณผ ํ์ฉ๋ฐฉ๋ฒ ยท Yoon's devlog (hyeyoonjung.com)
- IntersectionObserver
- B-Tree
- Web Server & Web Application Server
- Query Optimization (1)
- Query Optimization (2)
- M1 Mac์์ link preview generator ์ค์น ์ค ๋ฐ์ํ๋ ์ค๋ฅ
- CORS
- react-router-dom
- Artillery: Performance testing tool
- JWT
- LinkPreview
- SWR
- ์ฟผ๋ฆฌ์ฑ๋ฅํฅ์&๋ฌดํ์คํฌ๋กค
- 10์ 26์ผ ํ์์ผ
- 10์ 27์ผ ์์์ผ
- 10์ 28์ผ ๋ชฉ์์ผ
- 11์ 1์ผ ์์์ผ
- 11์ 2์ผ ํ์์ผ
- 11์ 3์ผ ์์์ผ
- 11์ 4์ผ ๋ชฉ์์ผ
- 11์ 9์ผ ํ์์ผ
- 11์ 10์ผ ์์์ผ
- 11์ 11์ผ ๋ชฉ์์ผ
- 11์ 16์ผ ํ์์ผ
- 11์ 17์ผ ์์์ผ
- 11์ 18์ผ ๋ชฉ์์ผ
- 11์ 23์ผ ํ์์ผ
- 11์ 24์ผ ์์์ผ
- 11์ 25์ผ ๋ชฉ์์ผ
- 11์ 30์ผ ํ์์ผ
- 12์ 1์ผ ์์์ผ
- 12์ 2์ผ ๋ชฉ์์ผ