カルーセルかスクロールメニューか?正直な比較

Swiper、Embla、keen-slider、react-slick はカルーセルエンジンです。スライドのセマンティクス、スナップ物理、エフェクトを得るために JavaScript でスクロールを再実装しています。react-horizontal-scrolling-menu はそのいずれでもありません。ブラウザネイティブのスクロールに乗り、項目ごとの可視性追跡を加えます。どちらが欲しいかは何を作るか次第です。そしてカルーセル用途のかなりの割合については、正直な答えは「あなたは最初からメニューを作っていた」です。

このライブラリSwiperEmblakeen-sliderreact-slick
それは何か可視性追跡付きのスクロールメニューフル機能のスライダー/カルーセルフレームワークヘッドレスカルーセルエンジンフレームワーク非依存のスライダーエンジンjQuery の slick スライダーの React 移植
スクロールエンジンブラウザネイティブのスクロールJS トランスフォーム + 物理JS トランスフォーム + 物理JS トランスフォーム + 物理JS トランスフォーム(CSS トランジション)
バンドル(コア、min+gzip)≈5.7 kB≈40 kB≈8 kB≈7 kB≈15 kB + slick CSS
画面上の項目がどれか内蔵——項目ごとの useIsVisibleスライドインデックスベーススライドインデックスイベントスライドインデックスイベントスライドインデックスベース
スナップ、エフェクト、物理なし——意図的に豊富(fade、cube、coverflow…)プラグインベース、トゥイーン可能あり(フリーモード含む)Fade、センターモード
ループ / 自動再生公開 API 上のレシピ内蔵プロパティプラグイン内蔵オプション内蔵プロパティ
スクロールバー、ホイール、キーボードフォーカスネイティブ——ブラウザから無料でエミュレート / オプトインモジュール自作(ヘッドレス)自作限定的
最適な用途カテゴリー行、タブストリップ、チップフィルター全画面スライダー、ギャラリーカスタムカルーセル(shadcn のデフォルト)最小限のカスタムスライダー旧 slick からの移行

バンドルサイズは概算のコアサイズです。サイズだけで決める前に、最新の数値は bundlephobia で確認してください。

まず、本当の問い

カルーセルはスライドを提示します。一度に 1 つ(または 1 ページ分)のものを、スナップ、エフェクト、そして「8 枚中 3 枚目」という位置感覚とともに見せます。メニューは、ユーザーが走査して選ぶ 1 行を提示します。カテゴリーレール、タブストリップ、チップバーです。カルーセルはスライドのセマンティクスを欲しがり、メニューはネイティブスクロールを欲しがります——慣性、スクロールバー、ホイール、タッチ、キーボードフォーカスがページの残り部分とまったく同じように振る舞うこと、そしてブラウザが与えてくれない 1 つ——どの項目が画面上にあるかの把握を加えたものです。

全画面画像スライダー、ヒーローギャラリー、あるいはスナップトゥスライドの物理を伴う何かを作るなら、カルーセルライブラリを使ってください——Embla か Swiper が優れています。このページはもう一方のケース、つまりどのカルーセル FAQ も静かに無視しているケースのためにあります。本当はスライドではなかった、クリック可能なものの行です。

vs Swiper

Swiper は現存する中で最も完成度の高いスライダーフレームワークです。エフェクト(fade、cube、coverflow)、仮想スライド、ズーム、パララックス、ページネーション、そして成熟したエコシステム。提供される機能を使うなら、その約 40 kB は元が取れます。トランスフォームでスクロールを再実装しているため、ネイティブのスクロールバー、ホイールの挙動、スクロールのアクセシビリティは、継承されるデフォルトではなく、あなたが設定するエミュレーションになります。

vs Embla

Embla は美しい物理と第一級の React アダプターを備えたヘッドレスカルーセルエンジンです。shadcn/ui がカルーセルを構築している土台であり、本物のカルーセルを完全に視覚的に制御したいときの正しいデフォルトです。ヘッドレスであることはメニューにとって両刃です。選択時のスクロールイン、項目ごとの可視性、矢印の無効化、フォーカス管理は、すべて自分で組み立てることになります。

vs keen-slider

keen-slider は軽量でフレームワーク非依存のスライダーエンジンです。フレームワークをまたいで 1 つの依存で済ませたいときの、最小限のカスタムスライダーとして良い選択です。他のライブラリと同様、トランスフォームでジェスチャーレイヤーを自前で持ち、API はスライドインデックスを中心に設計されています。スライドには向いていますが、「選択したチップをスクロールして表示し、何が見えているかを教えて」には不格好です。

vs react-slick

react-slick は jQuery 時代の slick カルーセルを React に移植したものです。今でも動きますが、別の CSS ファイルを引き込み、アーキテクチャは hooks より前のもので、メンテナンスもまばらです。離脱するチームはおおむね 2 つの陣営に分かれます。本物のカルーセル(Embla か Swiper へ)と、slick が既に入っていたために centerMode に曲げられてしまったナビゲーション行です。後者の陣営こそがこのライブラリのまさに形です。中央揃えの選択1 項目ずつの送りドラッグでスクロール を、スライダーエンジンなしで。

メニュー側はどんな見た目か

このサイトのすべてのパターンはライブでサーバーレンダリングされ、それぞれ完全なソースが付属します。スクロール可能なタブフィルターチップ追加読み込みの行、そして——カルーセルエンジンが必要だと思われがちな 2 つの機能——無限ループ自動再生 は、それぞれ公開 API 上で約 60 行です。