截至 2021 年,您无需克隆该元素。
浏览器创建一个半透明的克隆,跟随鼠标指针拖动事件。同时原始拖动的项目保持不变,没有任何变化。
如果您希望显示 原始元素 被拖动到 跟随鼠标 指针,那么这里就是诀窍。
设置:
<!- HTML Code Sample ->
<div draggable="true"
ondragstart="onDragStart(event)" ondrag="onDrag(event)"
ondragend="onDragEnd(event)">
<!- JS Code Sample ->
var dx = 0, dy = 0, draggedItem = undefined;
function onDragStart(e) {}
function onDrag(e) {}
function onDragEnd(e) {}
第 1 步:
将拖动项的 (x, y) 坐标与鼠标指针坐标之间的差值保存为 delta。
function onDragStart(e) {
draggedItem = e.target;
dx = e.clientX - draggedItem..getBoundingClientRect().x;
dy = e.clientY - draggedItem..getBoundingClientRect().y;
draggedItem.style.position = 'absolute';
}
第 2 步:
用鼠标指针的 (x, y) 坐标更新拖动项的位置。记得减去增量。
function onDrag(e) {
draggedItem.style.left = e.ClientX - dx;
draggedItem.style.top = e.ClientY - dy;
}
第 3 步:
取决于是为拖动的项目保留新位置还是运行一些自定义逻辑。
function onDragEnd(e) {
if('retain new position ???'){
draggedItem.style.left = e.ClientX - dx;
draggedItem.style.top = e.ClientY - dy;
} else {
draggedItem.style.position = 'static';
// Add your custom logic to handle drag completion
}
// Clear temporary data
draggedItem = undefined;
dx = dy = 0;
}
这将使原始拖动的项目跟随半透明的拖动克隆,从而克服了不透明的影响。 onDrag 事件每 350 毫秒触发一次,并创建一个不错的可视化效果。