UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

2025-04-01から1ヶ月間の記事一覧

【Web】requestAnimationFrameで1frameごとの処理を行う

Webアプリケーションのある処理によって画面の更新頻度が多く、CPUが弱いマシンだとフリーズしてしまう問題が起きた これを解決するために、デバウンスを実行しようと考えた時、遅延方法として requestAnimationFrame がいいのではないかと聞いた requestAni…

【dnd-kit】Sortable in Sortable の注意点

並び替え可能な要素(Sortable)の中に、さらに並び替え可能な要素(Sortable)を配置したい 例えば、Torello のような、カードリスト内も並び替えできるし、リスト自体も並び替えられるようなケース 実装した時に、つまづいたことなどを整理する 基本構成 S…

【dnd-kit】ドラッグ中のホイールスクロールができない問題

dnd-kit を使ってドラッグ&ドロップを実装した際、ドラッグ中にマウスのホイールスクロールできなくなった DragOverlay を使ってプレビュー表示していることが原因と分かったので、解決方法を整理しておく 現象 ドラッグ中、スクロール可能なコンテナやペー…

【dnd-kit】ドラッグ中のスクロール制御

ドラッグ&ドロップ操作中に画面端へ移動した際、dnd-kit ではスクロール制御のための仕組みとして autoScroll が用意されている ただ、このデフォルトの設定ではスクロール速度の調整ができないのでカスタマイズしたく調べた DndContext | @dnd-kit – Docum…

【dnd-kit】リスト末尾にドロップで要素を追加する

dnd-kitでドラッグ&ドロップでリストにアイテムを並び替えるだけでなく、リストの末尾にドラッグしたら新しくアイテムを追加したい 基本方針 リストの末尾に useDroppable な要素を置いてドロップ可能にする ドロップ判定時に「sortableリスト上なのか、dro…

【dnd-kit】カスタム collisionDetection で操作感を最適化する

dnd-kit では、ドラッグ中にどの要素を「ドロップ対象」とするかを判定する仕組みとして collisionDetection が用意されている docs.dndkit.com デフォルトの戦略だけでは操作感に課題が出ることも多いため、状況に応じてカスタマイズすることで最適な動作が…

【dnd-kit】DragOverlay が ドロップ直後にチラつく

dnd-kit の DragOverlay を使って、ドラッグ中のプレビュー表示をカスタマイズしたのだが、ドロップ直後に DragOverlay が一瞬消えて再描画されるので「チラつき」が気になった 原因はドラッグ終了時(onDragEnd)に activeId を即座に null にしていること…

【dnd-kit】input や button を避けてドラッグ開始条件を制御する

dnd-kit を使ってドラッグ&ドロップを実装する際、フォーム要素(input や button など)を含む場合に注意が必要だった ドラッグ操作とクリック・入力操作が競合しないように制御する方法を調べたのでメモ 発生した問題 input や select をクリックすると、…

【dnd-kit】リスト間ドラッグ&ドロップの実装

dnd-kit を使って複数のリスト間でドラッグ&ドロップを実現する場合のメモ 複数リストで考慮すべきポイント 各リストごとに SortableContext を用意する アイテムの id がリスト間で重複しないように設計する onDragEnd で「どのリストからどのリストへ移動…

【dnd-kit】SortableContext の items・strategy の役割

dnd-kit を使って並び替え機能を実装する際、SortableContext を使う このコンテキストが items と strategy というプロパティを持つが、それぞれがどのように動作に影響するのかを調べた docs.dndkit.com items の役割 items は、並び替え対象となる要素のI…

【dnd-kit】 useSortable と useDroppable の違い

以前、dnd-kit というライブラリを調べたことがあった uga-box.hatenablog.com 今回は実際に使ってみて useSortable と useDroppable についてわかったことをまとめる useDroppable の概要 useDroppable は、ドラッグ対象を受け入れる領域(ドロップゾーン)…