答案:JavaScript拖拽通过监听mousedown、mousemove和mouseup事件实现,元素需设为position: absolute;按下时记录鼠标偏移并标记拖动状态,移动时根据偏移实时更新位置,松开时结束状态。绑定事件到document可防止脱离,配合preventDefault和样式优化可提升体验。
JavaScript 实现拖拽功能主要通过监听鼠标事件来完成,包括 mousedown、mousemove 和 mouseup 三个关键事件。下面介绍一个基础但完整的实现方式,适用于大多数 DOM 元素。
拖拽的核心逻辑是:
拖我
注意:被拖动的元素必须设置 position: absolute,才能通过 top 和 left 控制位置。
以下是完整 JS 实现:
const draggable = document.getElementById('draggable');
let isDragging = false;
let offsetX, offsetY;
// 鼠标按下,准备拖动
draggable.addEventListener('mousedown', (e) => {
isDragging = true;
// 计算鼠标在元素内的偏移
offsetX = e.clientX - draggable.offsetLeft;
offsetY = e.clientY - draggable.offsetTop;
draggable.style.cursor = 'gra*g';
});
// 鼠标移动,执行拖动
document.addEventListener('mousemove', (e) => {
if (!isDragging) return;
e.preventDefault();
// 计算新位置
draggable.style.left = ${e.clientX - offsetX}px;
draggable.style.top = ${e.clientY - offsetY}px;
});
// 鼠标松开,结束拖动
document.addEventListener('mouseup', () => {
isDragging = false;
draggable.style.cursor = 'grab';
});
基本上就这些。不复杂但容易忽略细节。根据需要可以扩展支持多元素、限制拖动区域、拖拽释放目标检测等功能。