React实现拖拽效果

基于 React 的拖拽效果 Demo

一个基于 React 的拖拽功能实现的 Demo.

两个关键点

1, draggable 属性

2, drag 事件

draggable 属性

img 标签默认是支持拖拽的, 当时其他 HTML 标签, 想要其拖动的话, 需要为其添加 draggable="true" 属性

drag 事件

drag 相关的事件有: ondragstart、ondragend、ondragenter、ondragover、ondragleave、ondrop

一般情况下, 在实际使用时, 根据需求会有以下使用情况:

1, 被拖拽元素实现: ondragstart、ondragend

2, 被放置元素实现: ondragenter、ondragover、ondragleave、ondrop

注意: ondragover 的默认事件 Reset the current drag operation to "none". 所以想让一个元素可放置,需要重写 ondragover, 使用 preventDefault() 阻止其默认行为.

JavaScript 复制代码
element.ondragover = event => { 
    event.preventDefault();
    // ...
}

一般会在 ondrop 事件中确定最终行为的实现.

项目简介

项目分为 todo-panel, todo-list, todo-item 三个组件

1, todo-panel 控制整个 demo 效果的布局和总逻辑的实施, 所有响应式的 state 都在该组件中实现.

总控室.

所有需要动态渲染的 state 都在当前组件中配置

2, todo-list 列表组件, 用于展示某种形态的列表

桥梁.

子组件(todo-item)的 drag 行为需要通过 todo-list 组件传递给父组件(todo-panel);

父组件(todo-panel)的 state 变化, 也会引起 todo-list 的动态渲染.

3, todo-item 本 demo 中最小的行动单元, 具体的某一个 todo行为 的 封装组件

也是 被拖拽 的元素(组件), 因此, 在其内部实现了 ondragstart 和 ondragend 两个方法

注意: 当前 demo 只是一个本地的演示, 目的在于说明 drag 行为的实现需要配置的属性 以及 可能需要实现的事件, 在实际工作中可能还需要 ajax 请求的参与, 这里不再赘述.

项目源码地址

源码地址传送门

项目截图

相关推荐
LIO13 小时前
一套代码,多端并行——uni-app + Vue3 多端开发完全指南
前端·vue.js·uni-app
众创岛14 小时前
web自动化中的日志模块
java·前端·自动化
是谁眉眼14 小时前
npm执行错误 但黑窗口node可以成功启动问题分析
前端·npm·node.js
费曼学习法14 小时前
React Hooks 闭包陷阱:为什么 useState 拿不到最新值?
javascript·react.js
前端那点事14 小时前
干掉重复请求!Vue+Axios全局防抖节流封装,企业级开箱即用
前端·vue.js
用户0595401744614 小时前
Playwright 多标签页 IndexedDB 同步测试踩坑实录:折磨我6小时的浏览器沙箱陷阱
前端·css
焦糖玛奇朵婷14 小时前
终于搞清楚了,扭蛋机小程序这么厉害❗
java·服务器·前端·程序人生·小程序
前端那点事14 小时前
Vue三点运算符(...)超全详解!9大数组+4大对象实战用法,零基础必懂
前端·vue.js
漫游的渔夫14 小时前
前端开发者做 AI 工程:别停在脚本阶段,用 2 个 API 把 Agent 交给前端调用
前端·人工智能·typescript
skiyee14 小时前
在AI编程统治下,为什么UniApp开发更加需要这个框架?
前端