当前位置: 首页 > news >正文

html5:拖放 / demo / 拖放事件(Drag Events)/ DataTransfer 对象方法

一、推荐教程

菜鸟教程-拖放

二、demo 体验

2.1、菜鸟教程demo

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8"> 
<title>基础教程(cainiaojc.com)</title>
<style type="text/css">
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script>
function allowDrop(ev)
{ev.preventDefault();
}function drag(ev)
{ev.dataTransfer.setData("Text",ev.target.id);
}function drop(ev)
{ev.preventDefault();var data=ev.dataTransfer.getData("Text");ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body><p>拖动 nhooo.COM 图片到矩形框中:</p><div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<img id="drag1" src="/static/images/logo-n.png" draggable="true" ondragstart="drag(event)" width="336" height="69"></body>
</html>

2.2、AI demo

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>HTML5 拖放API与表格输出</title><style>body {font-family: Arial, sans-serif;margin: 20px;}.draggable-items {display: flex;gap: 10px;margin-bottom: 20px;}.draggable-item {padding: 10px;background-color: #4CAF50;color: white;border-radius: 4px;cursor: move;user-select: none;}.table-container {margin-top: 20px;}table {border-collapse: collapse;width: 100%;}th, td {border: 1px solid #ddd;padding: 8px;text-align: left;}th {background-color: #f2f2f2;}.drop-zone {min-height: 50px;border: 2px dashed #ccc;border-radius: 4px;padding: 10px;}.drop-zone.highlight {border-color: #4CAF50;background-color: #f0fff0;}</style>
</head>
<body><h1>HTML5 拖放API与表格输出</h1><div class="draggable-items"><div class="draggable-item" draggable="true" data-id="1">项目 1</div><div class="draggable-item" draggable="true" data-id="2">项目 2</div><div class="draggable-item" draggable="true" data-id="3">项目 3</div><div class="draggable-item" draggable="true" data-id="4">项目 4</div></div><div class="table-container"><h2>拖放结果表格</h2><table id="resultTable"><thead><tr><th>ID</th><th>项目名称</th><th>拖放时间</th></tr></thead><tbody id="tableBody"><!-- 拖放的项目将在这里显示 --></tbody></table></div><script>// 获取DOM元素const draggableItems = document.querySelectorAll('.draggable-item');const tableBody = document.getElementById('tableBody');// 为每个可拖动元素添加事件监听器draggableItems.forEach(item => {item.addEventListener('dragstart', handleDragStart);});// 拖放区域(整个文档)document.addEventListener('dragover', handleDragOver);document.addEventListener('drop', handleDrop);// 拖放开始处理函数function handleDragStart(e) {e.dataTransfer.setData('text/plain', e.target.textContent);e.dataTransfer.setData('application/json', JSON.stringify({id: e.target.dataset.id,text: e.target.textContent}));e.target.style.opacity = '0.4';}// 拖放经过处理函数function handleDragOver(e) {e.preventDefault(); // 允许放置e.dataTransfer.dropEffect = 'move';}// 拖放处理函数function handleDrop(e) {e.preventDefault();// 获取拖放的数据const data = JSON.parse(e.dataTransfer.getData('application/json'));// 创建新的表格行const newRow = document.createElement('tr');// 创建ID单元格const idCell = document.createElement('td');idCell.textContent = data.id;// 创建项目名称单元格const nameCell = document.createElement('td');nameCell.textContent = data.text;// 创建时间单元格const timeCell = document.createElement('td');timeCell.textContent = new Date().toLocaleString();// 将单元格添加到行newRow.appendChild(idCell);newRow.appendChild(nameCell);newRow.appendChild(timeCell);// 将行添加到表格tableBody.appendChild(newRow);// 重置拖动元素的样式draggableItems.forEach(item => {if (item.textContent === data.text) {item.style.opacity = '1';}});}</script>
</body>
</html>

三、拖放事件(Drag Events)

序号事件名称触发时机关键操作
1dragstart用户开始拖动元素时触发设置拖动数据:event.dataTransfer.setData()
2drag拖动过程中持续触发通常无需处理,可用于实时反馈(如修改样式)
3dragenter被拖元素进入放置目标时触发常用于高亮放置区域(需preventDefault()
4dragover被拖元素在放置目标上方移动时触发必须调用event.preventDefault()以允许放置
5dragleave被拖元素离开放置目标时触发移除高亮样式
6drop用户释放被拖元素到放置目标时触发获取数据:event.dataTransfer.getData(),更新DOM(如表格内容)
7dragend拖动操作结束时触发清理状态(如恢复样式)

四、DataTransfer 对象方法

序号方法/属性作用
1setData(format, data)存储拖动数据(如 text/plainapplication/json
2getData(format)获取拖动数据(需与setDataformat匹配)
3effectAllowed设置允许的拖动效果(copy/move/link/none
4dropEffect指定放置时的视觉效果(需与effectAllowed匹配)
5files获取拖动的文件列表(用于文件上传场景)
6setDragImage(image, x, y)自定义拖动时的预览图像

五、表格操作相关API

序号API用途
1document.createElement()动态创建表格行(<tr>)或单元格(<td>
2element.appendChild()将新行添加到表格的<tbody>
3element.insertBefore()在指定位置插入行
4table.insertRow()快速创建新行(需指定索引)
5row.insertCell()在行中插入单元格
6element.textContent设置单元格文本内容
7element.innerHTML设置单元格HTML内容(支持复杂结构)

六、插件推荐

6.1、Vue.Draggable(Vue专用)

特点:基于SortableJS封装,提供Vue组件式API,支持v-model双向绑定。

适用场景:Vue项目中的列表管理(如电商后台商品排序)。

核心方法:

<draggable v-model="items" @end="onDragEnd"><div v-for="item in items">{{ item.name }}</div>
</draggable>

6.2、GridStack(网格布局专用)

特点:支持响应式网格、动态调整大小,内置保存/恢复布局功能。

适用场景:仪表盘设计、数据可视化看板。

配置示例:

$('.grid-stack').gridstack({width: 12,float: true,cellHeight: 60
});

七、欢迎交流指正

http://www.dtcms.com/a/484027.html

相关文章:

  • 早期小软件与现代大软件的区别与发展问题
  • 图解网络(第二集)
  • 做外贸服装的网站微信如何引流推广精准加人
  • 多态:C++面向对象编程的“灵魂”所在
  • 大连网站快速排名提升深圳互联网公司网站
  • 建设银行广西分行网站做自媒体的网站有哪些
  • 楼市南京做凶宅的网站郑州营销网站建设公司
  • 搭建网站需要备案吗上海网站工作室
  • 学校网站建设计入哪个会计科目类似于wordpress的网站
  • 网站seo其应用买的网站模板怎么做
  • 【GESP】C++五级考试大纲知识点梳理, (3-4) 链表-双向循环链表
  • wordpress打开网站前广告怎样免费建设个人网站
  • 网站logo更换旅游做攻略用什么网站好
  • 天津黑曼巴网站建设无锡网站排名公司
  • 【鸿蒙5.0】Scroll左右滑动
  • 抢购网站源码dz门户 WordPress
  • 百度官方网站网址wordpress微博登陆
  • 团购网站 设计方案那些网站可以做行测题
  • Spring Boot中Spring Data JPA的常用注解
  • 02117 信息组织【第四章】
  • 做带会员后台的网站用什么软件建设工程信息网一体化平台
  • 做刷单网站违法吗win7 asp.net网站架设
  • DyCoke论文阅读
  • 做翻译网站 知乎丹阳网站建设方案
  • 门户网站建设基础术语制作旅游网站的步骤
  • 开发网站建设设计公司中天建设集团网站
  • C++系列之刷题系列---栈的应用
  • 做网站着用什么软件赣榆县建设局网站
  • 关于网站开发的毕业设计网站后台怎么给图片做水印
  • 商店商品管理系统淄博网站制作网页优化