티스토리 뷰
안녕하세요, 오늘은 Web API 중 하나인 Intersection Observer API에 대해 알아보는 시간을 갖겠습니다.
현대의 웹 개발은 사용자 경험을 개선하고 페이지 성능을 최적화하는 것이 매우 중요합니다. 이를 위한 다양한 기술 중 하나가 바로 "Intersection Observer API"입니다.
IntersectionObserver
he 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는 웹 페이지에서 요소가 화면에 보이는지 여부를 비동기적으로 감시할 수 있는 브라우저 API입니다. 요소를 감시하고 해당 요소가 유저에게 표시되는 시점을 알려줍니다.
이 기능은 비동기적으로 실행되기 때문에, scroll 같은 이벤트 기반의 요소 관찰에서 발생하는 렌더링 성능이나 이벤트 연속 호출 같은 문제없이 사용할 수 있습니다.
Intersection Observer API를 활용하면 무한 스크롤, 이미지 로딩 최적화, 스크롤 애니메이션, 광고 트래킹 등 다양한 기능을 구현할 수 있습니다.
1. 요소 관찰
new IntersectionObserver()를 통해 생성한 인스턴스(io)로 관찰자(Observer)를 초기화하고 관찰할 대상(Element)을 지정합니다. 생성자는 2개의 인수(callback, options)를 가집니다.
let observer = new IntersectionObserver(callback, options);
options으로 root요소와, root요소의 마진, threshold를 지정할 수 있습니다.
let options = {
root: document.querySelector("#scrollArea"),
rootMargin: "0px",
threshold: 1.0,
};
2. Observer 생성
관찰자(observer)에게 target요소를 관찰하도록 지시합니다.
const target = document.querySelector('.target-element');
observer.observe(target);
3. Callback
IntersectionObserver API는 대상을 지정하고 대상에 대한 관찰 정보를 받아야 하기 때문에 콜백함수로 이를 실행할 수 있습니다. 콜백은 2개의 인수(entries, observer)를 가집니다.
function callback(entries, observer) {
entries.forEach((entry) => {
if (entry.isIntersecting) {
// 요소가 화면에 나타났을 때 실행할 작업
} else {
// 요소가 화면에서 사라졌을 때 실행할 작업
}
});
}
entries
entries는 IntersectionObserverEntry 인스턴스의 배열입니다.
IntersectionObserverEntry는 읽기 전용(Read only)의 다음 속성들을 포함합니다.
- boundingClientRect: 관찰 대상의 x 및 y좌표와 크기 제공
- intersectionRect: 관찰 대상의 보이는 영역의 x 및 y좌표와 크기 제공
- intersectionRatio: 관찰 대상의 교차한 영역 백분율(intersectionRect 영역에서 boundingClientRect 영역까지 비율, Number)
- isIntersecting: 관찰 대상의 교차 상태(Boolean) -> 대상이 화면에 표시되는지에 대한 여부
- rootBounds: 지정한 루트 요소의 정보
- target: 관찰 대상 요소(Element)
- time: 변경이 발생한 시간 정보
threshold (임계값) : 0~1사이의 숫자로 default값은 0입니다.
- 0 : target 요소가 화면에 한 픽셀이 보이는 즉시 알림을 줍니다.
- 0.5 : target 요소가 50% 보일 때 콜백함수가 실행됩니다.
- 1: target 요소가 100% 보일 때 콜백함수가 실행됩니다.
const target = document.querySelector('.target-element');
const observer = new IntersectionObserver((items) => {
items.forEach((item)=> {
if(item.isIntersecting) {
console.log(item.target, "is visible!");
}
});
},
{
threshold: 0.5
}
);
observer.observe(target);
Intersection Observer API는 웹 개발에서 사용자 경험을 개선하고 페이지 성능을 향상하는 데 큰 도움을 주는 강력한 도구입니다. 요소의 가시성을 감시하고 필요한 작업을 수행할 수 있으므로, 무한 스크롤, 레이지 로딩, 애니메이션 효과, 광고 트래킹 등 다양한 시나리오에서 활용할 수 있습니다. 이 API를 사용하여 사용자에게 더 나은 웹 경험을 제공하는 방법을 고민해 보세요.
@Reference
'Frontend > JavaScript' 카테고리의 다른 글
[JavaScript] 고차 함수 - 클로저(2) (0) | 2023.10.13 |
---|---|
[JavaScript] 자바스크립트에서의 함수 - 클로저(1) (0) | 2023.10.09 |
[Node.js] Node.js를 활용한 SVG 파일 자동 모듈화 방법 (0) | 2023.01.02 |
[자바스크립트 비동기 처리] async, await, 유용한 Promise APIs (0) | 2022.04.15 |
[자바스크립트 비동기 처리] 프로미스(Promise) 개념과 활용 (0) | 2022.04.12 |
- Total
- Today
- Yesterday
- 백준
- cs50
- GIT
- github
- React Query
- 프로그래머스
- React
- javascript
- 리액트
- 자바스크립트알고리즘
- 모두를위한컴퓨터과학
- python
- 리액트네이티브
- 자바스크립트 비동기 처리
- 자바스크립트
- reactquery
- 타입스크립트
- 실전프로젝트
- html
- 무한스크롤
- 알고리즘자바스크립트
- network
- 항해99
- 클로저
- 프로그래머스 베스트앨범 자바스크립트
- css
- 자바스크립트 클로저
- 네트워크
- 프로그래머스 자바스크립트
- 모두를 위한 컴퓨터 과학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |