拖拽网格时元素位置错乱怎么办?
我在做一个可拖拽的网格布局,用的是原生 HTML5 的 drag 和 drop API。但每次拖动一个格子到新位置后,它总是跑到奇怪的地方,不是偏移就是重叠。
我试过在 drop 事件里手动设置 style.left/top,但坐标好像不对。是不是应该用 getBoundingClientRect()?还是我漏了什么关键步骤?
这是我的 drop 处理逻辑:
function handleDrop(e) {
e.preventDefault();
const id = e.dataTransfer.getData('text');
const dragged = document.getElementById(id);
const rect = e.target.getBoundingClientRect();
dragged.style.position = 'absolute';
dragged.style.left = rect.left + 'px';
dragged.style.top = rect.top + 'px';
}
你可以在 drop 事件里加上对窗口滚动位置的计算。下面是修改后的代码:
这样处理后,应该就能解决元素跑偏的问题了。别走弯路,直接上手试试这个方法吧。希望对你有帮助!