本文へスキップ

慣性スナップのスワイプページャー

4枚のカードを横スワイプでめくる。指の速さで次へ飛ぶか戻るかを決め、必ず1枚の位置にスナップする。ドットが連動し、PC ではドラッグと矢印ボタンで操作できる。

プレビュー

ドラッグ

操作ドラッグ/スワイプで操作できます(PC・スマホ対応)。

仕様書

向く場面
  • 数枚のおすすめ・お知らせカードを横にめくる
  • 指の速さで送りたいモバイルのカード面
  • PC でもドラッグと矢印で同じ操作にしたい場面
避ける場面
  • 10 枚以上のカード(ドットが読めない)
  • 自動再生の広告カルーセル
  • 各カードに縦スクロールが要る内容
構成要素
  • ビューポート
  • カードのトラック
  • 前後の矢印ボタン
  • 位置ドット
持っている状態
  • 通常
  • フォーカス
  • 押下中
  • 無効
キーボード

Tab で前後の矢印ボタンへ、Enter/Space で 1 枚めくる。端では該当ボタンが disabled。カード本体はキーボード操作の対象外

支援技術

矢印は aria-label「前のカード/次のカード」、端で disabled。ドットは aria-hidden の装飾で、現在位置は sr-only の role=status「2 / 4 枚目」で読む。reduced-motion で停止

動き

スナップ 380ms ease-out・ドット 240ms。距離 1/3 か速度 0.5px/ms で 1 枚だけ進み、端は 0.35 倍の抵抗で「もう無い」を伝える

デザインの要点

  • スナップ判定は距離だけでなく速度も見る。短くても速いフリックで次へ進めると、指の意図どおりに動く
  • 1枚ずつしか進ませない。速いフリックで2枚飛ぶと、どこまで進んだか分からなくなる
  • ドットは現在地の表示であり操作の主役ではない。小さく置き、タップ標的は矢印ボタンで確保する
  • 横ドラッグ中は縦スクロールを止めたいので track に touch-action: pan-y を指定し、横は自前で処理する

コード(コピーして使えます)

<div class="spd-wrap">
  <div class="spd-viewport" id="spd-viewport">
    <div class="spd-track" id="spd-track">
      <article class="spd-card spd-c1"><p class="spd-kicker">今週のおすすめ</p><h3 class="spd-title">朝 5 分の片付け習慣</h3><p class="spd-text">机の上を撮って記録するだけ。3 週間続いた人は 82%。</p></article>
      <article class="spd-card spd-c2"><p class="spd-kicker">新機能</p><h3 class="spd-title">家族と共有できるリスト</h3><p class="spd-text">買い物リストを一緒に編集。追加はその場で相手にも届きます。</p></article>
      <article class="spd-card spd-c3"><p class="spd-kicker">ヒント</p><h3 class="spd-title">通知は 1 日 1 回にまとめる</h3><p class="spd-text">設定 › 通知 から「まとめて受け取る」を選べます。</p></article>
      <article class="spd-card spd-c4"><p class="spd-kicker">読みもの</p><h3 class="spd-title">続けられる人の共通点</h3><p class="spd-text">目標を小さく、記録を目に見える場所に。1,284 人の記録から。</p></article>
    </div>
  </div>
  <div class="spd-controls">
    <button class="spd-arrow" type="button" id="spd-prev" aria-label="前のカード">‹</button>
    <div class="spd-dots" id="spd-dots" aria-hidden="true"></div>
    <span class="spd-sr" id="spd-pos" role="status" aria-live="polite">1 / 4 枚目</span>
    <button class="spd-arrow" type="button" id="spd-next" aria-label="次のカード">›</button>
  </div>
</div>

タグ

同じカテゴリ「モバイル・タッチ操作」のほかのパーツ

関連パーツ