본문으로 건너뛰기

Auto Init

autoInit 옵션으로 Flicking 인스턴스 생성 시 자동으로 init()을 호출할지 설정합니다. 지연 초기화가 필요한 경우 false로 설정합니다.

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

// autoInit: true (default)
new Flicking("#flick-auto", {
  autoInit: true,
  align: "center"
});

// autoInit: false (manual init)
const flickingManual = new Flicking("#flick-manual", {
  autoInit: false,
  align: "center"
});

let isInitialized = false;
const button = document.getElementById("init-btn");
const status = document.getElementById("init-status");

button.addEventListener("click", () => {
  if (!isInitialized) {
    flickingManual.init();
    isInitialized = true;
    button.textContent = "Initialized";
    button.disabled = true;
    status.textContent = "Status: initialized - drag enabled";
  }
});

요약

주요 옵션

옵션타입기본값설명
autoInitbooleantrue생성 시 자동 init() 호출
preventEventsBeforeInitbooleantrueinit() 호출 전 이벤트 발생 방지

값별 비교

동작적합한 상황
true인스턴스 생성 즉시 초기화 (기본값)일반적인 사용
false수동으로 init() 호출 필요지연 초기화, 동적 패널 추가 후 초기화

상세 설명

autoInit 동작 원리

autoInit: true이면 new Flicking() 호출 시 자동으로 init()이 실행됩니다. init()은 패널 크기 계산, 이벤트 바인딩, 초기 위치 설정 등을 수행합니다.

// 자동 초기화 (기본값)
const flicking = new Flicking("#el", { autoInit: true });
// 이미 초기화됨, 바로 사용 가능

// 수동 초기화
const flicking = new Flicking("#el", { autoInit: false });
// 아직 초기화 안 됨, 드래그 불가
flicking.init(); // 이제 초기화됨

초기화 전 상태

autoInit: false로 생성하면 init() 호출 전까지:

  • 드래그/터치 입력 무시
  • 패널 위치 계산 안 됨
  • 이벤트 리스너 바인딩 안 됨

preventEventsBeforeInit

autoInit: false로 지연 초기화를 사용할 때 관련 있는 옵션입니다. 기본값 true이면 init() 호출 전까지 ready, willChange, changed 등 Flicking 이벤트가 발생하지 않습니다. 초기화 전에 이벤트 핸들러가 의도치 않게 실행되는 것을 방지합니다.

false로 설정하면 초기화 전에도 일부 이벤트가 발생할 수 있으므로, 특별한 이유가 없다면 기본값을 유지하는 것을 권장합니다.

const flicking = new Flicking("#el", {
autoInit: false,
preventEventsBeforeInit: true // 기본값: init() 전 이벤트 방지
});

flicking.on("ready", () => {
console.log("init() 호출 후에만 실행됨");
});

flicking.init(); // 여기서부터 이벤트 수신 시작

사용 시나리오

언제 사용하나요?
  • autoInit: true: 일반적인 캐러셀, 정적 패널
  • autoInit: false:
    • API에서 데이터 로드 후 패널 생성
    • 탭/모달 내부의 숨겨진 Flicking
    • DOM 크기가 확정된 후 초기화 필요

주의사항

초기화 전 메서드 호출

autoInit: false 상태에서 moveTo(), prev() 등을 호출하면 오류가 발생할 수 있습니다. 반드시 init() 호출 후 사용하세요.

숨겨진 요소에서의 초기화

display: none 상태에서 초기화하면 크기 계산이 잘못될 수 있습니다. 요소가 보이는 상태에서 init()을 호출하거나, 표시 후 resize()를 호출하세요.

관련 링크

관련 옵션

관련 데모