React 向け Swiper 代替:本当に避けたいものは何かで選ぶ

誰も Swiper が悪いから離れるわけではありません — Swiper は現存する最も完成度の高いスライダーです。人々が離れるのは重さ(モジュール込みでない状態でも ≈40 kB)のため、その DOM と CSS を引き継ぐことになるため、あるいは自分たちの「スライダー」が実はスライドではなかったためです。それぞれの不満には、それぞれ最適な答えがあります。

SwiperEmblakeen-sliderreact-horizontal-scrolling-menu
バンドルサイズ(コア、min+gzip)≈40 kB≈8 kB≈7 kB≈5.7 kB
モデルスライド、フル装備スライド、ヘッドレススライド、最小限のエンジンネイティブスクロール行の中のアイテム
エフェクトとモジュール最も豊富プラグイン/自作一部組み込みなし — 代わりにレシピを用意
ジェスチャー層を独占するかはい(transform)はい(transform)はい(transform)いいえ — ブラウザがスクロール
アイテムごとの可視性スライドインデックスのイベントスライドインデックスのイベントスライドインデックスのイベント組み込み(useIsVisible)
乗り換えに向いているときどうせ全部自分でスタイリングする最小限のスライダー、React に縛られたくない「スライド」がクリック可能なアイテムである

サイズはおおよそのコアサイズです — Swiper はインポートしたモジュールに応じて増加します。つまり削ぎ落とした Swiper のビルドは評判より小さいということでもあります。

キロバイトから逃れる:Embla か keen-slider

プロダクトが本物のカルーセル — スナップし、一度に 1 ページ分のスライドを見せる — であれば、軽量エンジンはほぼそのまま置き換えられます:

どちらも transform ベースのスライドモデルを維持しているので、フェードやカバーフローのようなエフェクトは自作のままです — それらに頼っているなら、削ぎ落とした Swiper のビルドの方が、それらを再実装するより正直なところ良い答えです。

スライドモデルから逃れる:メニュー形のケース

もう一つの出口は、Swiper のスライドのセマンティクスがそもそも構造を支えていなかったビルド向けです:カテゴリー行、ロゴウォール、タブの帯、チップバー、商品レール。兆候は slidesPerView: 'auto'freeMode: true を組み合わせたような設定です — その組み合わせは、Swiper にネイティブスクロールのふりをさせているということです。

react-horizontal-scrolling-menu(≈5.7 kB)は、そのネイティブスクロールに加えて、ブラウザが提供しない部分を備えています:アイテムごとの可視性scroll-to-item、エッジ対応の矢印、そして クリックを壊さないドラッグ。エフェクトなし、スナップなし、ジェスチャーエミュレーションなし — Netflix 風の行タブチップバー の各ページ、または 完全な比較表 をご覧ください。

両方向への公平な注意

重さを減らすために Swiper から移行し、その後オートプレイ、ページネーション、a11y アナウンス、エフェクトを手作りすることになれば、40 kB の問題が人月単位の問題に変わってしまいます。自分の使い方が本当にその一部分でしかないなら軽量エンジンに乗り換え、スライドのセマンティクスがそもそも偽物だった場合にのみスクロールメニューに乗り換えましょう。Swiper の奥深さを使っているなら、Swiper を使い続けてください。