本文へスキップ

引っ張って更新

リストを上端で下に引っ張るとインジケータが伸び、閾値を超えて離すと更新スピナーが回って新着が差し込まれる。SNS/ニュースアプリの定番ジェスチャー。

プレビュー

ドラッグ

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

仕様書

向く場面
  • SNS・ニュースなど新着を先頭に差し込むフィード
  • モバイルで更新ボタンを置きたくない一覧
  • 上端で引く操作が定着したアプリ風UI
避ける場面
  • PC中心の画面(発見できない)
  • 上端に到達しない長いページの途中
  • 更新ボタンを併設しない実装
構成要素
  • インジケータ
  • 矢印/スピナー
  • スクロール領域
  • 一覧
  • 新着行
持っている状態
  • 通常
  • 押下中
  • 読み込み中
キーボード

引く操作はマウス・タッチ専用。代替: 「更新」button に Tab・Enter/Space で同じ更新が走る

支援技術

引き量は矢印→反転→↻ の記号で示し、更新中と「新着1件」を sr-only の role=status で告知。更新 button を併設。reduced-motion では回転と新着のフェードを止める

動き

引き量を pow(dy,0.85) で減衰し抵抗感を出す。閾値56pxで矢印180°回転 0.2s、更新中は 0.7s 回転、新着行は 0.4s の背景フェード。reduced-motion で停止

デザインの要点

  • 引き量は dy の 0.85 乗で減衰させる。等倍で付いてくると「引っ張っている」抵抗感が無く、どこで離せばよいか分からない
  • 閾値 56px で矢印を反転させ「離すと更新」を指を離す前に伝える。反転が無いと、離して初めて結果が分かる
  • 上端(scrollTop 0)で下へ引いたときだけ preventDefault する。常に奪うと一覧の縦スクロール自体が効かなくなる
  • ジェスチャーは発見しにくいので更新ボタンを併設する。PC と読み上げでは引く操作が存在しない
実装メモ

上端(scrollTop===0)で下方向に引いたときだけ、touchmove を passive:false で受けて preventDefault し、ネイティブのスクロール/オーバースクロールを奪って独自のインジケータを出します。引っ張り量は Math.pow(dy,0.85) で減衰させ“抵抗感”を作り、閾値超えで離すとスピナー回転→新着を先頭に差し込みます。PCではマウスのドラッグで擬似再現。実運用では更新処理を fetch などに置き換えてください。

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

<div class="ptr-frame">
  <p class="ptr-status" id="ptr-status" role="status" aria-live="polite"></p>
  <div class="ptr-spinner" id="ptr-spinner" aria-hidden="true"><span class="ptr-arrow" id="ptr-arrow">↓</span></div>
  <div class="ptr-scroll" id="ptr-scroll">
    <ul class="ptr-list" id="ptr-list">
      <li class="ptr-row"><span class="ptr-dot"></span>新しいコメントが届きました</li>
      <li class="ptr-row"><span class="ptr-dot"></span>山田さんがいいねしました</li>
      <li class="ptr-row"><span class="ptr-dot"></span>週末のイベント情報</li>
      <li class="ptr-row"><span class="ptr-dot"></span>フォロー中の更新まとめ</li>
      <li class="ptr-row"><span class="ptr-dot"></span>おすすめの記事3件</li>
      <li class="ptr-row"><span class="ptr-dot"></span>ポイントが付与されました</li>
    </ul>
  </div>
  <p class="ptr-hint">上端で下に引っ張る(PCはドラッグ)<button class="ptr-btn" id="ptr-btn" type="button">更新</button></p>
</div>

タグ

同じカテゴリ「ナビ・リスト操作」のほかのパーツ

関連パーツ