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>
相关推荐
UIUV19 分钟前
模块化CSS学习笔记:从作用域问题到实战解决方案
前端·javascript·react.js
aoi19 分钟前
解决 Vue 2 大数据量表单首次交互卡顿 10s 的性能问题
前端·vue.js
Kakarotto20 分钟前
使用ThreeJS绘制东方明珠塔模型
前端·javascript·vue.js
幽络源小助理20 分钟前
springboot校园车辆管理系统源码 – SpringBoot+Vue项目免费下载 | 幽络源
vue.js·spring boot·后端
donecoding21 分钟前
TypeScript `satisfies` 的核心价值:两个例子讲清楚
前端·javascript
Van_Moonlight26 分钟前
RN for OpenHarmony 实战 TodoList 项目:顶部导航栏
javascript·开源·harmonyos
技术狂小子26 分钟前
前端开发中那些看似微不足道却影响体验的细节
javascript
用户120391129472626 分钟前
使用 Tailwind CSS 构建现代登录页面:从 Vite 配置到 React 交互细节
前端·javascript·react.js
幽络源小助理44 分钟前
SpringBoot+Vue车票管理系统源码下载 – 幽络源免费项目实战代码
vue.js·spring boot·后端
小夏卷编程1 小时前
jeecg boot 路由缓存失效问题
vue.js·缓存