Handle 2D grid orientation for image list drag

The image grid wraps onto multiple rows, so picking the insertion
target by Y-axis alone meant horizontal moves within a row didn't
register. Add a 'grid' orientation that checks Y for row, then X for
column position within the row.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-12 14:44:12 +09:00
parent f27c3690e3
commit 633a895617

View File

@@ -198,11 +198,17 @@
var c = container.children[i]
if (c === drag.srcEl) continue
var rect = c.getBoundingClientRect()
var mid = (orientation === 'horizontal')
? rect.left + rect.width / 2
: rect.top + rect.height / 2
var pos = (orientation === 'horizontal') ? e.clientX : e.clientY
if (pos < mid) { target = c; break }
if (orientation === 'grid') {
// 2D 그리드: 위쪽 행에 있으면 그 행으로, 같은 행에서는 중앙 X 보다 왼쪽이면 이 카드 앞.
if (e.clientY < rect.top) { target = c; break }
if (e.clientY <= rect.bottom && e.clientX < rect.left + rect.width / 2) {
target = c; break
}
} else if (orientation === 'horizontal') {
if (e.clientX < rect.left + rect.width / 2) { target = c; break }
} else {
if (e.clientY < rect.top + rect.height / 2) { target = c; break }
}
}
if (target) {
if (drag.srcEl.nextSibling !== target) container.insertBefore(drag.srcEl, target)
@@ -228,7 +234,7 @@
})
}
bindContainerDnd('music-list', 'music', 'vertical')
bindContainerDnd('image-list', 'image', 'vertical')
bindContainerDnd('image-list', 'image', 'grid')
function cleanupDrag() {
if (!drag) return