拖拽排序时列表项位置错乱怎么办?
我用原生 JS 实现了一个简单的拖拽排序功能,但每次拖动后列表项的位置总是不对,有时候还会重叠。
试过监听 dragover 事件并调用 e.preventDefault(),但还是不行。下面是我的关键代码:
list.addEventListener('dragover', (e) => {
e.preventDefault();
const afterElement = getDragAfterElement(list, e.clientY);
const draggable = document.querySelector('.dragging');
if (afterElement == null) {
list.appendChild(draggable);
} else {
list.insertBefore(draggable, afterElement);
}
});
是不是 getDragAfterElement 的逻辑有问题?或者漏了什么关键步骤?
draggable的初始状态,然后在这段代码前加个 计算偏移量,这样定位会准点。差不多就行,别太纠结像素完美。