자바 스크립트(java script)

✨ 다중 옵저버

lamarcK 2025. 3. 31. 12:11

const observer01 = new IntersectionObserver (handle, options);

const observer02 = new IntersectionObserver (handle2, options2);

식으로 핸들과 옵션을 달리해서 각각 요소들이 서로 다른 루트 마진과 threshold를 가지게 하는것이 가능한 것인가?


완벽하게 맞다! 사용자가 이해하고 제시한 방식이 바로 서로 다른 rootMargin, threshold, 또는 콜백 로직개별 요소(또는 요소 그룹)에 적용하고자 할 때 사용하는 표준적이고 올바른 방법이다.


⚙️ 작동 원리: 독립적인 옵저버 인스턴스

  1. 독립된 객체 생성: new IntersectionObserver(callback, options) 코드는 호출될 때마다 **완전히 독립적인 IntersectionObserver 객체(인스턴스)**를 생성한다.
  2. 개별 설정 적용:
    • const observer01 = new IntersectionObserver(handle, options); 코드는 handle이라는 콜백 함수와 options 객체(특정 rootMargin, threshold 포함)를 사용하는 **첫 번째 옵저버(observer01)**를 만든다.
    • const observer02 = new IntersectionObserver(handle2, options2); 코드는 handle2라는 콜백 함수와 (아마도 options와는 다른) options2 객체(다른 rootMargin, threshold 포함 가능)를 사용하는 **두 번째 옵저버(observer02)**를 만든다.
  3. 개별 관찰:
    • observer01.observe(elementA); 처럼 observer01로 관찰하는 요소(elementA)는 options에 정의된 rootMargin과 threshold 규칙을 따르며, 교차 시 handle 콜백 함수가 실행된다.
    • observer02.observe(elementB); 처럼 observer02로 관찰하는 요소(elementB)는 options2에 정의된 rootMargin과 threshold 규칙을 따르며, 교차 시 handle2 콜백 함수가 실행된다.

🎯 결과: 요소별 다른 규칙 적용 가능

이 방식을 통해 사용자는 다음과 같은 목표를 달성할 수 있다.

  • 다른 rootMargin 적용: 어떤 요소 그룹은 미리 로딩을 위해 큰 양수 bottom 마진을 사용하고(observer01), 다른 요소 그룹은 화면 중앙에 확실히 보일 때만 감지하기 위해 음수 마진을 사용하도록(observer02) 설정할 수 있다.
  • 다른 threshold 적용: 어떤 요소는 1픽셀만 보여도 감지(threshold: 0)하고(observer01), 다른 요소는 50% 이상 보여야 감지(threshold: 0.5)하도록(observer02) 설정할 수 있다.
  • 다른 콜백 로직 적용: 교차 상태가 감지되었을 때 실행할 동작(handle, handle2) 자체를 요소 그룹별로 다르게 지정할 수도 있다. (물론, 필요하다면 동일한 콜백 함수를 여러 옵저버에 사용할 수도 있다.)

💡 요약

사용자가 제시한 대로, 서로 다른 options(다른 rootMargin, threshold 등)과 필요에 따라 다른 콜백 함수를 가진 별개의 IntersectionObserver 인스턴스를 여러 개 생성하는 것이 요소별로 다른 교차 감지 규칙과 동작을 적용하는 올바른 방법이다. 정확하게 이해했다!