dragula

4 篇文章 0 订阅
1 篇文章 0 订阅

dragula在react中的使用

参考文档:官方文档

使用步骤

  1. yarn add dragula
  2. 引入dragula的样式

效果预览

最终效果预览

代码

App.js

import React, {   useState, useEffect  } from 'react';
import './App.scss';
import dragula  from 'dragula'
function App() {

    const [data1, setData1] = useState([{id:0,name:'box1-1'}, {id:1, name:'box1-2'}])
    const [data2, setData2] = useState([{id:0,name:'box2-1'}, {id:1, name:'box2-2'}])

    useEffect(()=>{
        let drake = dragula([document.querySelector('.left_comp'), document.querySelector('.right_comp')],{
        moves: function (el, source, handle, sibling) { // 设置className === 'handle_box'的可以拖拽
            return handle.className === 'handle_box';
        },
        accepts: (el, target) => { // 设置可拖拽进入的目标区域
            return target.className === 'right_comp'
        },
        copy: (el, source) => { // 是否可复制
            return source.className === 'left_comp'
        },
        })
        drake.on('drop', (el, target, source, sibling) => { // 做事件监听

        })
        
        return () =>{

        }
    })
  
    
    let leftComp = (
        <div className='left_comp'>
        {data1 && data1.map(item =>{
            return(
            <div key={item.id} data-id={item.id} className='handle_box' >{item.name}</div>
            )
        })}
        </div>
    ) 
    let rightComp = (
        <div className='right_comp' id='right_parent'>
        {data2 && data2.map(item =>{
            return(
            <div key={item.id} data-id={item.id} className='box'>{item.name}</div>
            )
        })}
        </div>
    ) 
    return (
        <div className="App">
            <div className="left">
                {leftComp}
            </div>
            <div className="right">
                {rightComp}
            </div>
        </div>
    )
    }
    export default App;

app.scss

.App{
  height: 100vh;
  position: relative;
}
.left{
  width: 50%;
  height: 100%;
  border-right: 1px solid blue;
  position: absolute;
  left: 0;
  top: 0;
}
.left_comp, .right_comp{
  height: 100%;
}
.right{
  width: 50%;
  height: 100%;
  position: absolute;
  right: 0;
  top: 0;
}
.box, .handle_box{
  border: 1px solid skyblue;
  width: 60px;
  height: 50px;
  margin: 5px;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值