JavaScript拖放功能依赖原生Drag and Drop API,需设draggable="true"、在dragstart中用setData存数据、dragover中preventDefault允许投放、drop中getData执行操作。
JavaScript实现拖放功能主要依靠原生的拖放事件(Drag and Drop API),不需要第三方库就能完成基本交互。关键在于理解事件触发顺序、正确设置可拖动元素和放置目标,并处理数据传递。
默认情况下HTML元素不可拖动。需要给目标元素添加draggable="true"属性,例如:
拖我
仅设这个属性还不够,通常还要在dragstart事件中指定要传输的数据,比如:
目标容器默认会拒绝投放。必须监听dragover事件并调用event.preventDefault(),否则drop事件永远不会触发:
drop事件发生后,通常要做三件事:
现代浏览器都支持标准Drag API,但IE11及更早版本有差异(比如只支持text和URL格式)。移动端不支持原生拖放,需用touchstart/move/end模拟。简单场景可直接用SortableJS或react-dnd这类库;纯JS开发建议封装成小函数,把dragstart/dragover/drop绑定逻辑抽离,避免重复写preventDefault。
基本上就这些。不复杂但容易忽略preventDefault和dataTransfer的配合。