iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Html5中实现一个react拖拽排序组件
  • 316
分享到

怎么在Html5中实现一个react拖拽排序组件

2023-06-09 21:06:09 316人浏览 独家记忆
摘要

今天就跟大家聊聊有关怎么在HTML5中实现一个React拖拽排序组件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一步是先了解H5拖放的相关属性,MDN上有详细的说明,链接为htt

今天就跟大家聊聊有关怎么在HTML5中实现一个React拖拽排序组件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

第一步是先了解H5拖放的相关属性,MDN上有详细的说明,链接为https://developer.mozilla.org/en-US/docs/WEB/Events/dragstart

有一点需要注意的是,react.js会给所有的属性事件名称前加上"on",后面则为驼峰式写法。例如原生的click事件,在react.js里应使用onClick事件。

我的组件使用的拖放属性如下:

  • draggable 当设置为true时,当前控件可以拖拽

  • onDragStart 控件开始被拖拽时触发的事件,它提供一个dataTransfer.setData()方法,将必要的数据存储在对象中便于在其它方法中调用

  • onDraGover 规定当前控件可以接收拖拽的组件的方法,一般在此方法中阻止冒泡

  • onDragEnter 拖动后鼠标进入另一个可接受区域时触发,通过它可以实现移入效果

  • onDragLeave a拖到b,离开b的时候触发,可以用于监听消除移入效果的时机

  • onDrop 当控件被“释放”到一个有效的释放目标位置时触发,我在这个方法中处理数据,并通过它调用onChange方法,将value值暴露给父组件

其中draggable,onDragStart是被“拖拽”方需要设置的属性,onDragOver,onDragEnter,onDragLeave和onDrop是被“拖入”方需要设置的属性。不过对于我的拖拽排序组件,每一个元素都是拖拽和拖入方

第二步,既然“她"是react.js的组件, 按照习惯,简单的将输入属性定为为value,同时,暴露onChange事件监听value的变化,并将其暴露给父组件,同时,暴露一个属性sorTKEy告诉组件使用哪个key作为排序字段。
既然涉及到排序,同时允许指定组件每个元素的内部子组件,我将输入数据格式定义为一个数组对象,其中content可以为reactnode

 value: [                {                    content: 'div1',                    code: '01',                    sort: 0,                },                {                    content: 'div2',                    code: '02',                    sort: 1                },                {                    content: 'div3',                    code: '03',                    sort: 2                },                {                    content: 'div5',                    code: '05',                    sort: 5                },                {                    content: 'div4',                    code: '04',                    sort: 4                }]

根据value我去生成可排序组件的每个node,关键代码如下:

// 生成拖拽组件    createDraggleComponent(data, sortKey, style, uId) {        return data.sort(this.compare(sortKey)).map((item) => {            return (                <div                    className={styles.content}                    key={item.code}                    draggable={true}                    onDragEnter={this.dragenter.bind(this)}                    onDragLeave={this.dragleave.bind(this)}                    onDragStart={this.domdrugstart.bind(this, item[sortKey], item.code, uId, item)}                    onDrop={this.drop.bind(this, item[sortKey], data, sortKey, uId)}                    onDragOver={this.allowDrop.bind(this)}                    style={{ ...style }}>{item.content}</div>            )        })    }    render() {        const { value, sortKey, style } = this.props;        return (            <Row>                <div style={{ display: 'flex', flexDirection: 'row' }}>                    {this.createDraggleComponent(value, sortKey, style)}                </div>            </Row>        )    }

其中的属性方法具体实现:

// 拖动事件    domdrugstart(sort, code, ee) {        ee.dataTransfer.setData("code", code);        ee.dataTransfer.setData("sort", sort);    }    // 拖动后鼠标进入另一个可接受区域    dragenter(ee) {        ee.target.style.border = '2px dashed #008dff';        ee.target.style.boxShadow = '0 0 8px rgba(30, 144, 255, 0.8)';    }    // a拖到b,离开b的时候触发    dragleave(ee) {        ee.target.style.border = '1px solid grey';        ee.target.style.boxShadow = '';    }    // 对象排序    compare(key) {        return (obj1, obj2) => {            if (obj1[key] < obj2[key]) {                return -1;            } else if (obj1[key] > obj2[key]) {                return 1;            }            return 0        }    }    // 当一个元素或是选中的文字被拖拽释放到一个有效的释放目标位置时    drop(dropedSort, data, sortKey, ee) {        ee.preventDefault();        const code = ee.dataTransfer.getData("code");        const sort = ee.dataTransfer.getData("sort");        if (sort < dropedSort) {            data.map(item => {                if (item.code === code) {                    item[sortKey] = dropedSort;                } else if (item[sortKey] > sort && item[sortKey] < dropedSort + 1) {                    item[sortKey]--;                }                return item;            });        } else {            data.map(item => {                if (item.code === code) {                    item[sortKey] = dropedSort;                } else if (item[sortKey] > dropedSort - 1 && item[sortKey] < sort) {                    item[sortKey]++;                }                return item;            });        }        this.props.onChange(data)    }    allowDrop(ee) {        ee.preventDefault();    }

值得注意的点其实只有一个,我控制顺序的时候,并没有使用.target.before(document.getElementById({id}))去实际操控节点,而是在每次触发onDrop时间的时候,处理数据的sort,并通过onChange事件暴露给父组件,将数据输出,通过改变value值触发虚拟dom重新去渲染,以此控制顺序。

看完上述内容,你们对怎么在html5中实现一个react拖拽排序组件有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 怎么在Html5中实现一个react拖拽排序组件

本文链接: https://www.lsjlt.com/news/257908.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Html5中实现一个react拖拽排序组件
    今天就跟大家聊聊有关怎么在Html5中实现一个react拖拽排序组件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一步是先了解H5拖放的相关属性,MDN上有详细的说明,链接为htt...
    99+
    2023-06-09
  • react中实现拖拽排序react-dnd功能
    dnd文档 html 拖拽排序 import React, { useState, useRef } from 'react'; import { cloneDeep } from...
    99+
    2023-02-06
    拖拽排序react-dnd react拖拽排序
  • 怎么在HTML5中实现拖拽上传文件
    怎么在HTML5中实现拖拽上传文件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。拖拽批量上传文件夹该组件基于 Vue.js 实现,UI 框架是 elementUI,完整的 ...
    99+
    2023-06-09
  • 怎么在Android中使用RecyclerView实现一个图标拖拽排序功能
    这期内容当中小编将会给大家带来有关怎么在Android中使用RecyclerView实现一个图标拖拽排序功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现的思路用两个RecyclerView实现,同时...
    99+
    2023-06-14
  • jQuery怎么实现拖拽排序效果
    这篇文章给大家分享的是有关jQuery怎么实现拖拽排序效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。增强动态增加Div效果原来没有新建动作,分析代码后发现很容易增强~~<...
    99+
    2024-04-02
  • Vue拖拽排序组件Vue-Slicksort怎么使用
    这篇“Vue拖拽排序组件Vue-Slicksort怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue拖拽排序组件V...
    99+
    2023-07-05
  • JavaScript怎么实现拖拽排序效果
    这篇“JavaScript怎么实现拖拽排序效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript怎么实现拖拽...
    99+
    2023-06-30
  • vue中怎么实现一个拖拽进度条滑动组件
    这期内容当中小编将会给大家带来有关vue中怎么实现一个拖拽进度条滑动组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。调用组件如下:<slider :mi...
    99+
    2024-04-02
  • vue拖拽组件vuedraggable API options如何实现盒子之间相互拖拽排序
    小编给大家分享一下vue拖拽组件vuedraggable API options如何实现盒子之间相互拖拽排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下...
    99+
    2024-04-02
  • react项目中使用react-dnd实现列表的拖拽排序功能
    目录1.先安装依赖2.创建一个 index.js 文件3.新建example.js文件4.新建TopicLis.js文件5.新建 ItemTypes.js现在有一个新需求就是需要对一...
    99+
    2023-02-06
    react-dnd列表的拖拽排序 react-dnd拖拽排序 react拖拽排序
  • vue怎么实现列表拖拽排序效果
    这篇文章主要介绍“vue怎么实现列表拖拽排序效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue怎么实现列表拖拽排序效果”文章能帮助大家解决问题。效果如下:<template>&nb...
    99+
    2023-06-29
  • HTML5拖放API怎么实现拖放排序功能
    小编给大家分享一下HTML5拖放API怎么实现拖放排序功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言HTML5 中提供了...
    99+
    2024-04-02
  • 微信小程序图片上传组件实现图片拖拽排序
    目录引言首先来看效果组件设计使用方式总结引言 图片上传组件是一个组件库目前来看必不可少的功能了。笔者近日给自己开源的toy工具库也添加了这一功能。相比原生和大部分组件库来说,它不仅支...
    99+
    2024-04-02
  • 微信小程序怎么实现图片拖拽排序
    这篇文章主要介绍“微信小程序怎么实现图片拖拽排序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现图片拖拽排序”文章能帮助大家解决问题。首先来看效果对于组件内部来说。笔者提供了一个参数...
    99+
    2023-06-29
  • VUE怎么使用draggable实现组件拖拽
    这篇文章主要讲解了“VUE怎么使用draggable实现组件拖拽”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VUE怎么使用draggable实现组件拖拽”吧!实现步骤1、导入draggab...
    99+
    2023-06-29
  • 怎么在Java中利用dropzone.js实现一个文件拖拽上传功能
    本篇文章为大家展示了怎么在Java中利用dropzone.js实现一个文件拖拽上传功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。jsp页面: 首先必须引入dropzone的js和css文件<...
    99+
    2023-05-31
    java dropzone.js ava
  • Vue组件设计之多列表拖拽交换排序功能实现
    目录1. 安装所需依赖2. 组件设计实现3. 组件使用示例在前端开发中,拖拽排序是一种提升用户体验非常好的方式,常见的场景有单列表拖拽排序,多列表拖拽交换排序,比如以下这种效果: ...
    99+
    2023-05-18
    vue拖拽交换排序 vue多列表拖拽交换排序 vue列表拖拽排序
  • HTML5中怎么实现一个拖放效果
    这篇文章给大家介绍HTML5中怎么实现一个拖放效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。先看html核心代码: 代码如下:<div> <p>把黄色小方块...
    99+
    2024-04-02
  • 怎么在HTML5中利用拖拽功能实现拼图游戏
    本篇文章为大家展示了怎么在HTML5中利用拖拽功能实现拼图游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<!--代码如下,最下面给出了我测试用的9张250*250的图片切片-->&l...
    99+
    2023-06-09
  • Android项目中怎么实现一个可拖拽界面
    本篇文章为大家展示了Android项目中怎么实现一个可拖拽界面,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。以自定义ImageView为例:public class FloatingImageVie...
    99+
    2023-05-31
    android roi 目中
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作