ui
dot pagination / dynamic bullets / scrolling dots indicator
スライドの現在位置を小さな点の列で示すインジケーター。枚数が多いときは見せる点を数個に絞り、現在地に合わせて列ごと横へ送り、端の点を縮めて「まだ続きがある」を伝える。点が切り替わる瞬間に一度だけ弾ませると、どこへ移ったかが目で追える。
02 — Prompt template
03 — Params
visible(一度に見せる点の数) — 範囲 3〜9 / 初期 5
5個が定番(Instagram・Swiperのdynamic bulletsも5個前後)。奇数にすると現在地が中央に来る。7個を超えると点を絞る意味が薄れる。slide(列を送る時間 s) — 範囲 0〜0.6 / 初期 0.25
0.2〜0.3sが自然(Swiperは0.2s)。0にすると列が瞬間で切り替わり、どちらへ動いたかが分からなくなる。0.5sを超えると連打に追いつかない。edge(端の点の縮小率) — 範囲 0.3〜1 / 初期 0.5
0.4〜0.6で「この先にもある」が伝わる。1にすると縮めない=窓の外に続きがあるのか、ここで終わりなのかが見分けられない。blip(切り替え時の弾み 倍) — 範囲 1〜2 / 初期 1.5
現在地の点を一瞬だけこの倍率まで膨らませて戻す(0.6→1.5→1が観察元の値)。1.2〜1.5が目安。1なら弾まない。1.8を超えると点がはみ出して隣と重なる。
04 — Vocab
dynamic bullets — Swiperの呼び名。現在地の周りだけ点を大きく見せ、離れた点を縮めて数を絞るページネーション。Instagramのカルーセルの点も同じ型。
windowing — 全要素のうち一部だけを見せる「窓」を作り、現在地に合わせて窓を動かすこと。点の数がスライド数に比例して増えなくなる。
clamp — 値を下限と上限の間に収める操作。窓の先頭をclampしないと、最初や最後のスライドで窓が端から飛び出して空白が見える。
aria-current — 「今ここ」を支援技術に伝える属性。色だけで現在地を示すと、色が見分けにくい利用者には伝わらない。
overshoot easing — 目標値を一度越えてから戻るイージング(cubic-bezierの第2・第4値が1を超える)。点が切り替わった瞬間に一度だけ弾ませるのに使う。
05 — NG → OK examples
NG
言い方: 「「スライダーの下に、インスタみたいな丸いドットを付けて」」
なぜNG: 全スライド数ぶんの点が1列に並ぶだけの実装が返ってくる。20枚あれば20個の点がスマホの幅からはみ出し、今どこにいるかも読めない。「点を数個に絞って列ごと送る」「端を縮めて続きを示す」という、インスタのドットの本体部分は頼まないとまず入らない。
OK
言い方: 「「dot paginationを実装。点は5個だけ見せる窓にして、現在地が中央に来るようclampしたstartでトラックをtranslateX、0.25sで送る。窓の端の点は外に続きがあるときだけscale(0.5)。現在地はkeyを付け替えて0.6→1.5→1で一度弾ませる。点はbuttonでジャンプ可、reduced-motionでは送りと弾みを止める」」
なぜOK: 見せる個数・窓の位置の式・送り方(transform)・端を縮める条件・弾みの値まで指定している。特に「外に続きがあるときだけ縮める」は、抜けると最初と最後の点まで縮んで終わりが分からなくなる。
