vue3【实战】来回拖拽放置图片

效果预览

技术要点

  • img 标签默认就是可拖拽的(a 标签也是)
  • 事件 e 内的 dataTransfer 对象可用于临时存储事件过程中的数据
  • 拖拽事件的默认行为是用浏览器新开页签打开被拖拽对象,所以通常需要禁用默认的浏览器行为
  • 被拖拽元素必须设置 id,方便放置时,获取到被拖拽的元素
  • 被拖拽元素响应事件 dragstart,一旦开启拖动,便将被拖拽的元素的 id 存入 dataTransfer 对象
  • 放置的容器响应事件 drop,通过 appendChild 将被拖拽的元素添加到放置的容器中

代码范例

html 复制代码
<script setup>
function allowDrop(e) {
  e.preventDefault()
}

function drag(e) {
  e.dataTransfer.setData('logo', e.target.id)
}

function drop(e) {
  e.preventDefault()
  let data = e.dataTransfer.getData('logo')
  e.target.appendChild(document.getElementById(data))
}
</script>

<template>
  <div class="row">
    <div class="box" @drop="drop" @dragover="allowDrop">
      <img id="logo" @dragstart="drag" src="./ecLogo.jpg" alt="EC编程俱乐部的logo" height="60" />
    </div>
    <div class="box" @drop="drop" @dragover="allowDrop"></div>
  </div>
</template>

<style lang="scss" scoped>
.row {
  display: flex;
}
.box {
  border: 1px solid black;
  height: 200px;
  width: 200px;
}
</style>
相关推荐
Hello.Reader17 分钟前
Three.js / Cesium 卡顿怎么办?把三维渲染搬到 GPU 服务器
服务器·开发语言·javascript
chi113018 分钟前
【无标题】
前端·javascript·python
萝卜兔0081 小时前
PIKACHU_UnsafeFileUpload
javascript·php
Highcharts.js1 小时前
Highcharts 集成到 React 或 Vue 项目中时,如何高效地使用 TypeScript技巧?
vue.js·人工智能·react.js·typescript·前端框架·highcharts
Java后端的Ai之路10 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
程序员大阳13 小时前
副队长JavaScript教程(50)-DOM:网页开发的起点
javascript·dom·es·节点·概念·document·关系
香芋芋圆17 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
晗夜未央19 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
jktantan20 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
我命由我1234521 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理