简单讲述ondragstart、drag、ondragend、ondragenter、ondragover、ondrop、ondragleave七个与拖拽相关的监听事件,并运用实现拖拽过程放置样式变化

 

事件描述监听对象
ondragstart该事件在用户开始拖动元素时触发被拖拽物体
drag该事件在元素正在拖动时触发被拖拽物体
ondragend该事件在用户完成元素的拖动时触发被拖拽物体
ondragenter该事件在拖动的元素进入放置目标时触发放入的区域
ondragover该事件在拖动元素在放置目标上时触发放入的区域
ondrop该事件在拖动元素放置在目标区域时触发放入的区域
ondragleave该事件在拖动元素离开放置目标时触发放入的区域
<template>
  <div :class="$options.name">
    <div class="drag" draggable @dragstart="dragstart" @drag="drag" @dragend="dragend" >被拖拽物体</div>
    <div class="drop" @dragenter="dragenter" @dragover="dragover" @drop="drop" @dragleave="dragleave" >放入的位置1</div>
    <div class="drop" @dragenter="dragenter" @dragover="dragover" @drop="drop" @dragleave="dragleave" >放入的位置2</div>
  </div>
</template>
<script>
export default {
  name: "testDrag",
  methods: {
    // 被拖拽物体的监听事件----------------------------------------
    dragstart(e) {
      let 需要传输的内容 = {
        cssText: `background-color: #F56C6C;color: white;font-size: 24px;`,
        text: `物体被放进来了`,
      };
      e.dataTransfer.setData("自定义字段名", JSON.stringify(需要传输的内容));
    },
    drag(e) {
      e.currentTarget.setAttribute("drag", true);
    },
    dragend(e) {
      e.currentTarget.removeAttribute("drag");
    },

    // 放置区域的监听事件----------------------------------------
    dragenter(e) {
      e.currentTarget.setAttribute("dragenter", true);
    },
    dragover(e) {
      e.currentTarget.setAttribute("dragenter", true);
      e.preventDefault(); //ondragover 事件规定在何处放置被拖动的数据。默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。
    },
    drop(e) {
      e.currentTarget.removeAttribute("dragenter");
      let 需要传输的内容 = JSON.parse(e.dataTransfer.getData("自定义字段名"));
      e.currentTarget.style.cssText = 需要传输的内容.cssText;
      e.currentTarget.innerHTML = 需要传输的内容.text;
    },
    dragleave(e) {
      e.currentTarget.removeAttribute("dragenter");
    },
  },
};
</script>
<style lang="scss" scoped>
.testDrag {
  .drag {
    width: 100px;
    height: 100px;
    box-sizing: border-box;
    border: 1px solid #eee;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
    &[drag] {
      color: #f56c6c;
      border-color: #f56c6c;
      &::after {
        content: "拖拽中";
        position: absolute;
        right: 0;
        top: 0;
        background-color: #f56c6c;
        color: white;
        font-size: 14px;
      }
    }
  }
  .drop {
    margin-top: 20px;
    width: 200px;
    height: 200px;
    box-sizing: border-box;
    border: 1px solid #eee;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    position: relative;
    &[dragenter] {
      color: #f56c6c;
      border-color: #f56c6c;
      &::after {
        content: "物体进入区域";
        position: absolute;
        right: 0;
        top: 0;
        background-color: #f56c6c;
        color: white;
        font-size: 14px;
      }
    }
  }
}
</style>

基于下面的例子一个简单的Vue2例子讲明白拖拽drag、移入dragover、放下drop的触发机制先后顺序-CSDN博客文章浏览阅读81次。【代码】一个简单的Vue2例子讲明白拖拽drag、移入dragover、放下drop的触发机制先后顺序。icon-default.png?t=N7T8https://blog.csdn.net/qq_37860634/article/details/136783097

进阶的玩法

用dragstart、drag、dragend、dragover、drop、dragleave实现针对表格列的顺序进行拖拽排序(附带实现选择某几列数据显示或隐藏)-CSDN博客将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)-CSDN博客。【代码】将数组指定索引位置的元素 移动到 目标索引位置(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)icon-default.png?t=N7T8https://blog.csdn.net/qq_37860634/article/details/136788464

用第三方插件实现表格的行拖拽排序基于sortablejs实现拖拽element-ui el-table表格行进行排序-CSDN博客【代码】基于sortablejs实现拖拽element-ui el-table表格行进行排序。icon-default.png?t=N7T8https://blog.csdn.net/qq_37860634/article/details/136791080

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值