본문으로 건너뛰기

Observe Panel Resize

observePanelResize 옵션으로 각 패널 요소에 ResizeObserver를 연결해, 패널 크기가 변경될 때 Flicking이 자동으로 레이아웃을 재계산하도록 합니다.

패널 안의 "넓히기" 버튼을 눌러 두 캐러셀의 차이를 확인하세요.

import Flicking from "@egjs/flicking";
import "@egjs/flicking/dist/flicking.css";
import "./styles.css";

// observePanelResize: false (default)
const _flick1 = new Flicking("#flick-default", {
  align: "center",
  observePanelResize: false
});

// observePanelResize: true
const _flick2 = new Flicking("#flick-observe", {
  align: "center",
  observePanelResize: true
});

// Toggle panel width on button click
document.querySelectorAll(".expand-btn").forEach(btn => {
  btn.addEventListener("click", e => {
    e.stopPropagation();
    const panel = btn.closest(".flicking-panel");
    const isWide = panel.style.width === "70%";
    panel.style.width = isWide ? "40%" : "70%";
    btn.textContent = isWide ? "Expand" : "Shrink";
  });
});

요약

주요 옵션

옵션타입기본값설명
observePanelResizebooleanfalse패널 요소의 크기 변경을 ResizeObserver로 감지

의존 옵션

observePanelResizeuseResizeObservertrue일 때만 동작합니다. useResizeObserver의 기본값이 true이므로 별도 설정 없이 사용할 수 있습니다.

값별 비교

동작적합한 상황
false뷰포트 크기 변경만 감지 (기본값)패널 크기가 고정된 일반 캐러셀
true패널별 크기 변경도 감지, 자동 재계산동적 콘텐츠, 이미지 로드, 아코디언 패널

상세 설명

observePanelResize 동작 원리

기본적으로 Flicking의 autoResize뷰포트(컨테이너) 요소의 크기 변경만 감지합니다. 패널 내부 콘텐츠가 바뀌어 패널 자체의 크기가 달라지더라도 Flicking은 이를 알 수 없습니다.

observePanelResize: true로 설정하면 각 패널 요소에도 ResizeObserver가 연결됩니다. 패널 크기가 변경되는 즉시 beforeResize / afterResize 이벤트가 발생하고 레이아웃이 재계산됩니다.

const flicking = new Flicking("#el", {
observePanelResize: true
// useResizeObserver: true (기본값이므로 생략 가능)
});

사용 시나리오

언제 사용하나요?
  • 이미지가 포함된 패널: 이미지 로드 완료 후 실제 크기로 패널이 커질 때
  • 아코디언/토글 패널: 사용자 인터랙션으로 패널 높이가 변할 때
  • 동적 콘텐츠: API 응답 후 패널 내 콘텐츠가 추가되어 크기가 변할 때
  • adaptive: true와 함께: 뷰포트 높이가 활성 패널 높이에 맞춰 바뀌는 캐러셀에서 패널 내용이 동적으로 변할 때
성능 고려

observePanelResize: true는 모든 패널에 ResizeObserver를 연결하므로, 패널 수가 많을 때 약간의 오버헤드가 발생할 수 있습니다. 패널 크기가 고정된 일반 캐러셀에서는 기본값(false)을 유지하세요.

resizeOnContentsReady와의 차이

resizeOnContentsReady는 초기화 시 이미지/미디어 로드 완료를 한 번 기다리는 옵션입니다. observePanelResize는 초기화 이후에도 지속적으로 패널 크기를 관찰합니다. 용도가 다르므로 상황에 맞게 선택하세요.

관련 링크

관련 옵션

관련 데모