先看效果

再看代码
utils.js

import Mock from 'mockjs';

// mock老师们数据
const data = Mock.mock({
'list|10-40': [{
'id|+1': 1,
name: '@cname'
}]
}) // 模拟获取老师接口
export const getTeacher = () => {
return Promise.resolve(data)
} // 处理数据 适配tr->td
export const groupByLen = (len, data) => {
const res = [];
for (let i = 0; i < data.length; i += len) {
res.push(data.slice(i, i + len));
}
return res;
};

app.jsx

import { getTeacher, groupByLen } from './utils';
import { useEffect, useState } from 'react'; export default function App() {
const [teachers, setTeachers] = useState([]);
useEffect(() => {
syncTable()
}, []); const syncTable = async () => {
const { list } = await getTeacher();
const res = groupByLen(6, list);
setTeachers(res);
} // 用户开始拖动元素时触发
const onDragstart = (e) => {
console.log('开始移动', e.target);
e.dataTransfer.setData("Text", e.target.id);
} // 元素正在拖动时触发
const onDrop = (e) => {
e.preventDefault();
const movedTargetId = e.dataTransfer.getData("Text");
const movedTarget = document.getElementById(movedTargetId);
const movedTargetParent = movedTarget.parentNode;
const receiveNodeName = e.target.nodeName;
// 必须放到盒子里
if (receiveNodeName === 'TD') {
movedTargetParent.appendChild(e.target.childNodes[0]);
e.target.innerHTML = '';
e.target.appendChild(movedTarget);
} else if (receiveNodeName === 'DIV') {
const divParent = e.target.parentNode;
movedTargetParent.appendChild(divParent.childNodes[0]);
divParent.innerHTML = '';
divParent.appendChild(movedTarget);
}
} const allowDrop = (e) => {
e.preventDefault();
} return (
<>
<table>
<tbody>
{teachers.map((itemGroup, index) => (<tr key={index}>
{itemGroup.map(item => (<td onDrop={onDrop} key={item.id} onDragOver={allowDrop}>
<div id={item.id} onDragStart={onDragstart} draggable="true">{item.name}</div>
</td>))}
</tr>))}
</tbody>
</table>
</>
)
}

h5/react表格元素拖动交换ondrop的更多相关文章

  1. Html5-draggable元素拖动

    Html5元素拖动 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safari 支持拖动 ...

  2. vue自定义元素拖动

    岗位序列拖动交换岗位 <span draggable="true" @dragstart="onDragstart($event,index,index2)&quo ...

  3. html中表格元素的相关总结

    表格元素相关总结: 1.在CSS中,内部表元素(如td.tr.col等)生成矩形框,这些矩形框包含内容.内边距和边框,但没有外边距,因此如果定义外边距,浏览器将忽略该定义:对于table元素,外边距有 ...

  4. Griddle, griddle-react 一个REACT 表格组件

    Griddle, griddle-react 一个REACT 表格组件: http://griddlegriddle.github.io/Griddle/index.html

  5. HTML中表格元素TABLE,TR,TD及属性的语法

    table:表格元素及属性 <table width="80%" border="1" cellspacing="1" cellpad ...

  6. ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多

    ListView实现Item上下拖动交换位置  并且实现下拉刷新  上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...

  7. 实现dom元素拖动

    本文主要写一下如何实现dom元素拖动,目前使用jquery库实现之. 主要的注释附在代码中,大家可以根据代码画一个小的窗口模型图,以便于理解. <!DOCTYPE html> <ht ...

  8. 第六十三节,html表格元素

    html表格元素 学习要点:     1.表格元素总汇     2.构建表格解析     本章主要探讨HTML5中表格元素的用法.表格的主要用途是以网格的形式显示二维数据. 一.表格元素总汇     ...

  9. html5权威指南:表格元素

    第十一章:表格元素                                                                                           ...

  10. html5之表格元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. H5 ios端底部安全距离CSS

    html 头部添加 <meta name="viewport" content="width=device-width, initial-scale=1.0,min ...

  2. 有的时候,给指定的控件,追加一个装饰器Adorner,备注下

    有的时候,给指定的控件,追加一个装饰器Adorner,备注下 比如给某个图片加个工具条等等...都可以采用装饰器的方式来实现,复用性高,易维护,特此备注下 整体效果如下: 1 <Window x ...

  3. 解决C盘根目录不能创建文件,只能创建文件夹问题

    转载:https://blog.csdn.net/xinke453/article/details/7496545 解决方法 用管理员运行cmd 输入 icacls c:\ /setintegrity ...

  4. .NET + AI | Semantic Kernel vs Microsoft.Extensions.AI

    Microsoft.Extensions.AI 在 .NET AI 应用架构中的定位示意图:应用程序通过 Microsoft.Extensions.AI 调用下层各种 AI 服务(如 Semantic ...

  5. 模板导入_分页_cookie_装饰器_实例

    程序目录 urls.py """s14_day21 URL Configuration"""from django.contrib impo ...

  6. 编译原理:python编译器--运行时机制

    python的运行时机制的核心 -- python对象机制的设计 理解字节码的执行过程 用 GDB 跟踪执行一个简单的示例程序,它只有一行:"a=1". 对应的字节码如下.其中,前 ...

  7. 面试官说又逮到一个不会用Git的

    这里这写简要,要看具体的步骤及解释清移步:https://www.bilibili.com/read/cv10510952 如果是自己创建仓库写代码上传(demo是自己仓库的自定义名字): git i ...

  8. WindowsPE文件格式入门04.导入表

    https://bpsend.net/thread-307-1-1.html PE 内部保存了导入的dll 和 api信息,这些信息保存到一个表里面.称为导入表, 导入表就是 记住一个可执行文件导入了 ...

  9. 游戏开发godot+mcp等于事半功倍,分享一下如何安装godot相关的mcp及有何作用

    游戏开发godot+mcp等于事半功倍,分享一下如何安装godot相关的mcp及有何作用 总结 视频讲解: https://www.bilibili.com/video/BV1P9jRzXEXU 在使 ...

  10. 转|如何从 100 亿 URL 中找出相同的 URL

    题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. 解答思路 每个 URL 占 64B,那么 50 亿 ...