drag事件

需求简单实现:

参考: https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragover_event

一、拖拽源

给元素添加属性 draggable="true" ,就会变成可以拖拽的源

    <div
        draggable="true"
        @drag="handleSourceDrag"
        @dragstart="handleDragStart"
        @dragend="handleDragEnd"
        >
        可拖拽源
    </div>

1、dragstart事件:源被认定开始拖拽的时候触发

    handleDragStart (e) {
      console.log('开始被拖拽')
      this.dragSource = e.target
      this.dragText = e.target.innerText
    },

2、drag事件:源在被拖拽的时候持续触发

    handleSourceDrag () {
      console.log('I am dragged')
    },

3、dragend 事件:源被认定结束拖拽的时候触发

    handleDragEnd () {
      console.log('拖拽结束')
    },

二、容器

    <el-input
        v-model="value1"
        @dragenter.native="handleDragEnter"
        @dragover.native="handleDragOver"
        @dragleave.native="handleDragLeave"
        @drop.native="handleDrop"
    ></el-input>

4、dragenter事件:容器监听到有源进入时触发

    handleDragEnter (e) {
      console.log(e) // e为容器
      console.log('有源进入')
    },

5、dragover事件:容器监听到有源一直在时持续触发

    handleDragOver (e) {
       e.preventDefault()// 很关键,很必要,drop事件才能生效 ,其作用是:阻止默认行为以允许放置
       console.log('源一直在')
    },

6、dragleave事件:容器监听到有源离开时触发

    handleDragLeave (e) {
      console.log('源离开')
    },

7、drop事件:容器监听到有源降落时触发

    handleDrop (e) {
      console.log('有源降落', e) //e为容器
      this.value1 = this.dragText
    }

三、实操:

1. 如果是el-input ,需要 .native 使用原生方法 

2. 采用js原生方法,获取对象,直接监听对应事件即可

3. 标黄底的1 5 7是最简单的结构


20240117补充:

需求:左侧el-tree,拖拽叶子节点至右侧区域,实现对应视频播放。

<el-tree
  :data="data"
  node-key="id"
  default-expand-all
  draggable
  :allow-drag="allowDrag"
  :allow-drop="allowDrop">
</el-tree>

1.  draggable为true,树的结点就可以拖动

2.  allow-drag属性,判断哪种结点可以被拖动,allowDrag(node):boolean

3.  allow-drop属性,拖拽时判定目标节点能否被放置,allowDrop(draggingNode, dropNode, type)

4.  将结点拖拽至右侧区域时,左侧也会进行相应的树排列,因此直接allow-drop属性直接为false即可

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值