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>
相关推荐
tianchang18 分钟前
策略模式(Strategy Pattern)深入解析与实战应用
前端·javascript·代码规范
best66620 分钟前
JavaScript的Math内置对象,到底是何方神圣?
javascript
掘金安东尼26 分钟前
技术解析:高级 Excel 财务报表解析器的架构与实现
前端·javascript·面试
每天开心33 分钟前
一文教你掌握事件机制
前端·javascript·ai编程
LeeAt39 分钟前
真的!真的就一句话就能明白this指向问题
前端·javascript
阳火锅40 分钟前
都2025年了,来看看前端如何给刘亦菲加个水印吧!
前端·vue.js·面试
夕水1 小时前
ew-vue-component:Vue 3 动态组件渲染解决方案的使用介绍
前端·vue.js
Winwin1 小时前
js基础-数据类型
javascript
Winwin1 小时前
哈?Boolean能作为回调函数?
javascript
我麻烦大了1 小时前
实现一个简单的Vue响应式
前端·vue.js