首页 > 其他分享 >React拖拽效果实现

React拖拽效果实现

时间:2023-12-26 16:48:24浏览次数:29  
标签:ondragover 效果 list React drag 组件 todo 拖拽

基于 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() 阻止其默认行为.

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 请求的参与, 这里不再赘述.

项目源码地址

源码地址传送门

项目截图

项目截图

标签:ondragover,效果,list,React,drag,组件,todo,拖拽
From: https://www.cnblogs.com/xuepangpang/p/17928462.html

相关文章

  • Flutter 创建一个交错效果的侧边栏菜单
    一、创建一个没有动画效果的菜单import'package:flutter/material.dart';classMenuextendsStatefulWidget{constMenu({super.key});@overrideState<Menu>createState()=>_MenuState();}class_MenuStateextendsState<Menu>{staticc......
  • HTML5应用之文件拖拽上传
    使用HTML5的文件API,可以将操作系统中的文件拖放到浏览器的指定区域,实现文件上传到服务器。本文将结合实例讲解HTML5+jQuery+PHP实现拖拽上传图片的过程,来看下HTML5的魅力吧。HTML我们在页面中放置一个拖拽区域#drop_area,即接收拖拽的区域,#preview用来预览拖拽上传的图片信息。......
  • From Bench to Bioreactor: Scaling Up Bioprocesses for Commercial Success
    1.背景介绍Bioprocessesarefundamentaltomanyindustries,includingpharmaceuticals,foodandbeverage,andbioenergy.Astheseindustriesgrow,theneedtoscaleupbioprocessesbecomesincreasinglyimportant.However,scalingupbioprocessesisnotatrivi......
  • 序列比对方法的纠错效果和准确度比对
    ##序列比对方法的纠错效果和准确度比对在实际应用中,不同的序列比对方法在纠错效果和准确度比对方面具有一定的差异。这些差异主要体现在方法的设计原理和采用的技术上。例如,整体比对方法主要用于找出序列之间的整体相似性,而局部比对方法则可以找到序列之间的局部相似性[1]。然而......
  • 可拖拽表单都有哪些特点?
    可拖拽表单拥有传统表单没有的优势和特点,在当前快节奏的现代化社会和职场中,拥有了非常多新老客户朋友的支持和青睐,成为助力企业实现流程化办公的有力武器。那么,可拖拽表单都有什么特点和优势?可以用在哪些领域里?带着这些问题,我们一起来探寻答案吧。在众多服务商中,有这么一家服务商......
  • 好看的滚动文字渐入效果
    全部代码:const observers = [] // 用于存储所有观察者 -> 收集起来主要是为了当路由变化时效果之前的观察者。export default { // ... 省略 setup() {  const route = useRoute()  onMounted(() => {   initFirstScreen() // 初始化 -> 给首......
  • react_hooks系列 useMemo
    一、概念和作用​写在函数式组件里的“函数调用代码”。如果函数式组件重新渲染时,每次都会执行“调用函数的代码”。如果不是必须的,那么就是性能的浪费。useMemo就是解决这个问题的。即:useMemo是防止不必要的的函数调用。​文字描述总是让你很难理解。很抽象。还是要看代码的......
  • VUE框架CLI组件化配置全局Router路由实现前置守卫鉴权效果------VUE框架
    //导入vue-router对象importVueRouterfrom"vue-router";importHebeifrom"../pages/hebei.vue";importHenanfrom"../pages/henan.vue";importCityfrom"../pages/city.vue";//创建路由器对象(在这个路由器对象中配置路由)constrouter=ne......
  • Android 快速实现View的展开和收缩效果
    原文:Android快速实现View的展开和收缩效果-Stars-One的杂货小窝看到一篇文章用到了一个布局的属性animateLayoutChanges就能实现展开和收缩效果,特意记录一下效果代码<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxml......
  • Vue3之实现一个可拖拽的div
    实现一个可拖拽的div写法如下:constchatbox=ref();constdragx=(el)=>{letoDiv=chatbox.value;//当前元素letdisX=el.clientX-oDiv.offsetLeft;letdisY=el.clientY-oDiv.offsetTop;document.onmousemove=function(e){//通过事件委托,......