拖拽元素时位置偏移抖动怎么优化?
用原生JS做列表项拖拽时,拖动元素总会出现几像素的位置偏移,拖动起来特别卡顿。试过设置position: fixed和实时更新top/left,但拖动结束回弹的时候还是会抖一下。
代码是这样写的:
let shiftX = 0;
function handleDrag(e) {
const offset = {
left: e.clientX - shiftX,
top: e.clientY - shiftY
};
draggedItem.style.left = <code>${offset.left}px</code>;
draggedItem.style.top = <code>${offset.top}px</code>;
}
CSS用了:
.draggable-item {
position: absolute;
will-change: transform;
transition: transform 0s;
}
测试发现当快速拖动到页面边缘时偏移更明显,有没有更好的坐标计算方式或者性能优化方法?
CSS 去掉 transition: transform 0s,加上
pointer-events: none防止拖拽时鼠标移出元素,应该能用。