h5/react表格元素拖动交换ondrop
先看效果
再看代码
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的更多相关文章
- Html5-draggable元素拖动
Html5元素拖动 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safari 支持拖动 ...
- vue自定义元素拖动
岗位序列拖动交换岗位 <span draggable="true" @dragstart="onDragstart($event,index,index2)&quo ...
- html中表格元素的相关总结
表格元素相关总结: 1.在CSS中,内部表元素(如td.tr.col等)生成矩形框,这些矩形框包含内容.内边距和边框,但没有外边距,因此如果定义外边距,浏览器将忽略该定义:对于table元素,外边距有 ...
- Griddle, griddle-react 一个REACT 表格组件
Griddle, griddle-react 一个REACT 表格组件: http://griddlegriddle.github.io/Griddle/index.html
- HTML中表格元素TABLE,TR,TD及属性的语法
table:表格元素及属性 <table width="80%" border="1" cellspacing="1" cellpad ...
- ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多
ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...
- 实现dom元素拖动
本文主要写一下如何实现dom元素拖动,目前使用jquery库实现之. 主要的注释附在代码中,大家可以根据代码画一个小的窗口模型图,以便于理解. <!DOCTYPE html> <ht ...
- 第六十三节,html表格元素
html表格元素 学习要点: 1.表格元素总汇 2.构建表格解析 本章主要探讨HTML5中表格元素的用法.表格的主要用途是以网格的形式显示二维数据. 一.表格元素总汇 ...
- html5权威指南:表格元素
第十一章:表格元素 ...
- html5之表格元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- lua随写
--local util={}--function util.Split(str, sep)-- local sep, fields = sep or ":", {}-- loca ...
- CyclicBarrier的await()方法底层原理
一.定义 CyclicBarrier 的 await() 方法是其核心功能之一,用于让线程在屏障点等待,直到所有参与的线程都到达屏障后,才能继续执行. 其底层实现依赖于 AQS(AbstractQue ...
- 如何0基础学stm32?
如何0基础学stm32? 作为一个混迹嵌入式领域十余年的老兵,每次看到"0基础学STM32"这样的提问,我都忍不住想笑,又有些无奈.这就像问"如何0基础学开飞机" ...
- Golang从0到1实现简易版expired LRU cache带图解
1.支持Put.Get的LRU实现 想要实现一个带过期时间的LRU,从易到难,我们需要先学会如何实现一个普通的LRU,做到O(1)的Get.Put. 想要做到O(1)的Get,我们很容易想到使用哈希表 ...
- 查阅相关资料, 了解什么是scrum中的3355?
在Scrum中,3355是一个用于描述其核心组成部分的模型,具体包括三个核心角色.三个工件.五个关键事件和五个价值观.下面是对Scrum中3355的详细解释: 三个核心角色 产品负责人(Product ...
- sql注入与防止sql注入
数据库中的数据 sql代码 package com.zjw.jdbc2; import java.sql.Connection; import java.sql.DriverManager; impo ...
- 【HUST】网安|操作系统实验|实验三 内存管理
文章目录 任务 任务1 Win/Linux编写二维数组遍历程序,理解局部性的原理. 1. 提示 2. 任务代码 3. 结果及说明 任务2 Windows/Linux模拟实现OPT和LRU淘汰算法. 1 ...
- AI 重塑测试,2025 年何去何从?
各位技术同仁,特别是奋斗在软件质量保障一线的朋友们,大家好! 2025 年的软件测试领域,AI 早已不是锦上添花的"时髦概念",而是决定效率.质量乃至生存空间的"核心引擎 ...
- HarmonyOS NEXT开发实战教程:聊天交友App
一早醒来Mate70上热搜了,余承东发文宣布Mate70要在本月发布,史上最强手机终于要来了. 今天分享一个交友app实战教程,是幽蓝君用整整一个周末开发的,时间有限,只做了些皮毛,不是很完善,不过拿 ...
- net core mvc6使用jwt实现简单的登录
创建一个新的.NET Core Web应用程序项目.在创建项目时,选择MVC模板. 在项目中添加Microsoft.AspNetCore.Authentication.JwtBearer包: 在Vis ...