Skip to main content

Pagination

Adds page indicators to show the current panel position. Supports three types: bullet, fraction, and scroll.

import Flicking from "@egjs/flicking";
import { Pagination } from "@egjs/flicking-plugins";
import "@egjs/flicking/dist/flicking.css";
import "@egjs/flicking-plugins/dist/pagination.css";
import "./styles.css";

const COLORS = ["#e74c3c", "#3498db", "#2ecc71", "#f39c12", "#9b59b6"];

const camera = document.querySelector(".flicking-camera");
COLORS.forEach((color, i) => {
  const panel = document.createElement("div");
  panel.className = "flicking-panel";
  panel.style.background = color;
  panel.textContent = i + 1;
  camera.appendChild(panel);
});

const flicking = new Flicking("#flick", {
  circular: true
});

flicking.addPlugins(new Pagination({ type: "bullet" }));

Summary

Key Options

OptionTypeDefaultDescription
type"bullet" | "fraction" | "scroll""bullet"Indicator display style
parentElHTMLElement-Parent element for the indicator. By default, uses the .flicking-pagination element

Required CSS

import "@egjs/flicking-plugins/dist/pagination.css";

Details

Behavior by Type

TypeDescription
bulletDisplays dots corresponding to each panel. Click to move to that panel
fractionDisplays numbers in current/total format (e.g., 1/5)
scrollDisplays a scrollbar-style indicator

HTML Structure

The pagination element must be placed inside the viewport.

<div class="flicking-viewport">
<div class="flicking-camera">
<!-- Panels -->
</div>
<div class="flicking-pagination"></div>
</div>

Framework-specific Usage

React — Use ViewportSlot:

<Flicking plugins={plugins}>
{/* Panels */}
<ViewportSlot>
<div className="flicking-pagination"></div>
</ViewportSlot>
</Flicking>

Vue — Use the #viewport slot:

<Flicking :plugins="plugins">
<!-- Panels -->
<template #viewport>
<div class="flicking-pagination"></div>
</template>
</Flicking>

Notes

Caution
  • You must import @egjs/flicking-plugins/dist/pagination.css for the indicator to display correctly.
  • With the bullet type, having too many panels can result in too many dots. In that case, consider using the fraction or scroll type.