본문으로 건너뛰기

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로 감지

의존 옵션​

observePanelResize는 useResizeObserver가 true일 때만 동작합니다. 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는 초기화 이후에도 지속적으로 패널 크기를 관찰합니다. 용도가 다르므로 상황에 맞게 선택하세요.

관련 링크​

관련 옵션​

관련 데모​