拖拽事件

原生拖拽事件

  /**
   * @dragstart  拖拽开始(鼠标按下并开始移动时触发,会在拖放的元素上触发事件)
   * @drag 拖拽移动 (在移动的过程中持续触发)
   * @dragend  拖拽结束 (拖拽停止后触发,无论是否拖拽到有效区域)
   * 当拖拽到有效区域,会触发以下事件:
   * @dragenter 进入 (当拖拽元素进入有效区域触发)
   * @dragover 完毕 (当拖拽元素进入有效区域且持续移动,持续触发)
   * @dragleave 离开  (当拖拽元素离开有效区域触发)
   * @drop 终止 (当拖拽元素,放置在有效区域中触发) // 在火狐3.5+中,会默认默认转向图像文件,所以需要阻止默认行为e.preventDefault()
  */
  let span = document.querySelector('span')
  let box = document.querySelector('.box')
  let img = document.querySelector('img')


  /**
   * 设置拖拽元素
   * 系统默认的可拖拽元素外需要设置:span.draggable = true  (或标签上设置即可)
   * @e.dataTransfer.setData(key,value) 设置要发送的数据
   * @e.dataTransfer.getData(key) 获取发送的数据
   * @e.dataTransfer.effectAllowed 和 e.dataTransfer.dropEffect 必须配合使用才生效
   * @effectAllowed 必须放在dragstart 
   * @dropEffect 必须放在drop  
   * 它只是改变了鼠标指针的样式,并没什么卵用,不介意样式的话可以忽略不计,直接执行你想要的结果
  */
  span.draggable = true
  img.addEventListener('dragstart',function(e){
    console.log('拖拽开始')
    e.dataTransfer.effectAllowed = "move"
    console.log(e)
    e.dataTransfer.setData("name",'xiaoji') // 这里写传递的信息
  })
  img.addEventListener('dragstart',function(e){
    console.log('拖拽移动')
  })
  img.addEventListener('dragstart',function(e){
    console.log('拖拽结束')
  })

  /**
   * 设置拖拽有效区域
   * dragover  是必须的  阻止默认行为 e.preventDefault()也是必须的,否则不会触发drop事件
   * 会触发dragleave 事件,最好都加上阻止默认行为,否则有的浏览器,不会触发drop事件
  */
  box.addEventListener('dragenter',function(e){
    console.log('进入有效区域')
  })
  box.addEventListener('dragover',function(e){
    console.log('有效区域移动')
   
    e.preventDefault();
  })
  box.addEventListener('drop',function(e){
    console.log('放置在有效区域')
    e.dataTransfer.dropEffect= "move"
    console.log(e)
    var data = event.dataTransfer.getData("name");
    console.log(this.append(span))
    console.log(data)
  })
  box.addEventListener('dragleave',function(e){
    console.log('放置到有效区域外')
    e.preventDefault();
  })

  • e.dataTransfer.effectAllowed 和 e.dataTransfer.dropEffect 属一览
    在这里插入图片描述

案例

let box = document.querySelector('.box')
// 实现一个拖拽上传
function getFiles(e){
  e.preventDefault();
  if(e.type === 'drop'){
    let files = e.dataTransfer.files
    // files.length  是拖拽了几个文件过来
    if(files.length > 1){
      // 表单提交上传文件
      let forms = new FormData()
      // 循环拿到每个文件
      for (const key in files) {
        if (Object.hasOwnProperty.call(files, key)) {
          const item = files[key];
          console.log(item)
          forms.append(`file${key}`,item)
        }
      }
       // 这里写你想做的事
    }
  }
}
box.addEventListener('dragenter',getFiles)
box.addEventListener('dragover',getFiles)
box.addEventListener('drop',getFiles)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值