本文へスキップ

スナップ位置のあるシート

地図の上に重なるシートを、ハンドルのドラッグで「閉じる/半分/全画面」の 3 段階に止める。離した位置と速さで最寄りの段へ吸い付き、全画面のときだけ中身がスクロールする。

プレビュー

ドラッグ

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

デザインの要点

  • 段は 3 つまで。閉じた状態でも見出しと 1 行が見える高さ(ピーク)を残し、シートの存在を消さない
  • 離したときは最寄りの段へ吸い付く。ただし速いフリックは距離に関係なく次の段へ送ると、指の意図に合う
  • 中身のスクロールは全画面のときだけ許す。半分の状態でスクロールできると、シートの引き上げと取り合いになる
  • ドラッグはハンドルとヘッダーで受ける。本文で受けるとリンクやボタンのタップと衝突する

プロのサイトでの実例

実例は「型の使われ方」の観察であり、コード・ロゴの転載ではありません。サイト側の更新で見え方が変わることがあります。

実装メモ

段の位置は translateY の % で持ち、シート自体は常に全高(height:100%)です。閉じた段は「ピーク 72px」を残す計算にしているので、枠の高さが変わっても見出しが隠れません。実装では地図側の操作とシートのドラッグが競合しないよう、ドラッグの受け口をハンドル+ヘッダー(.ssp-grab)に限定しています。

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

<div class="ssp-phone" id="ssp-phone">
  <div class="ssp-map" aria-hidden="true">
    <span class="ssp-pin"></span>
  </div>
  <section class="ssp-sheet" id="ssp-sheet" aria-label="周辺の店舗">
    <div class="ssp-grab" id="ssp-grab">
      <button class="ssp-handle" type="button" id="ssp-handle" aria-label="シートの高さを切り替える"></button>
      <div class="ssp-head">
        <h2 class="ssp-title">周辺の店舗</h2>
        <span class="ssp-meta" id="ssp-state">半分</span>
      </div>
    </div>
    <div class="ssp-content" id="ssp-content">
      <ul class="ssp-list">
        <li class="ssp-item"><span class="ssp-name">ミナト工房 港南店</span><span class="ssp-sub">徒歩 4 分 ・ 営業中 〜19:00</span></li>
        <li class="ssp-item"><span class="ssp-name">コーヒースタンド 灯</span><span class="ssp-sub">徒歩 6 分 ・ 営業中 〜21:00</span></li>
        <li class="ssp-item"><span class="ssp-name">本と道具 ひなた</span><span class="ssp-sub">徒歩 9 分 ・ 本日休業</span></li>
        <li class="ssp-item"><span class="ssp-name">港南市民ホール</span><span class="ssp-sub">徒歩 12 分 ・ 9:00〜22:00</span></li>
        <li class="ssp-item"><span class="ssp-name">中央公園 売店</span><span class="ssp-sub">徒歩 14 分 ・ 営業中 〜17:00</span></li>
        <li class="ssp-item"><span class="ssp-name">自転車修理 ふじ</span><span class="ssp-sub">徒歩 15 分 ・ 営業中 〜18:00</span></li>
        <li class="ssp-item"><span class="ssp-name">港南駅 観光案内所</span><span class="ssp-sub">徒歩 18 分 ・ 9:00〜17:00</span></li>
      </ul>
    </div>
  </section>
</div>

タグ

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

関連パーツ