因为公司的一个项目需求,实现拖拽来交换位置,虽然知道有一些插件,但还是想有没有其它的快速实现方法,因为之前好像有了解过标签的拖拽属性,还稍微有点印象。就想试试。就在这里简单的做个总结。


需要给标签添加 draggable="true"

#### drag事件

  • 当目标元素被拖动时触发该事件
  • 开始拖动时,鼠标不松开,会一直触发该事件
document.addEventListener("drag", function( event ) {
console.log('拖动目标元素时触发drag事件')
}, false);


dragstart事件

  • 当目标元素开始拖动时触发该事件
document.addEventListener("dragstart", function( event ) {
console.log('开始拖拽事件')
}, false);


dragover事件

  • 放置目标元素时触发事件,放置到有效的放置目标时
  • 鼠标不松开会一直触发该事件
document.addEventListener("dragover", function( event ) {
console.log('放置目标元素时触发事件 ')
}, false);

元素的拖拽属性和事件_重置

dragenter事件

  • 可拖动的元素进入可放置的目标时触发,即拖动到一个有效的目标上
document.addEventListener("dragenter", function( event ) {
console.log('当可拖动的元素进入可放置的目标时高亮目标节点')
}, false);


dragleave事件

  • 拖动元素离开可放置目标节点时触发,即离开有效目标时
  • 一个标签相当于一个节点,包含html,body,但是不包含 head、没有高度的标签或者 display 属性为 none 的标签,其中的高度包含了 margin
document.addEventListener("dragleave", function( event ) {
console.log('当拖动元素离开可放置目标节点,重置其背景')
}, false);


drop事件

  • 将拖动的元素到所选择的放置目标节点中时触发,即将拖动的元素放置到一个有效的目标中时触发
document.addEventListener("drop", function( event ) {
console.log('将拖动的元素到所选择的放置目标节点中')
}, false);


dragend事件

  • 结束拖拽事件,鼠标松开结束拖动时触发
document.addEventListener("dragend", function( event ) {
console.log('结束拖拽事件')
}, false);


在vue中相关事件

  • @drag
  • @dragstart
  • @dragover
  • @dragenter
  • @dragleave
  • @drop
  • @dragend
<li
draggable="true"
@dragstart="dragstarts($event,index)"
@dragend="dragengs"
@dragenter="dragenters($event,index)"
>


MDN链接:​https://developer.mozilla.org/zh-CN/docs/Web/API/Document/drag_event​