drag and drop 实现课程表拖拽功能

简介

        本文会基于html5 的drag and drop 实现课程表拖拽功能。

实现效果

技术实现

源码

function App() {

    const m = 3;
    const n = 3;
    const courses = ['语文', '数学', '英文']

    return <div style={{display: 'flex'}}>
        <div style={{
            display: 'grid',
            gridTemplateColumns: `repeat(${n}, 1fr)`,
            gridTemplateRows: `repeat(${m}, 1fr)`,
            gridGap: '10px',
            margin: '5vw 5vw',
            backgroundColor: '#f1f1f1'
        }}>
            {
                Array.from({length: m}, (row, i) => {
                    return Array.from({length: n}, (col, j) => {
                        return <div
                                    onDragOver={(e) => e.preventDefault()}
                                    onDrop={(e) => {
                                        e.preventDefault();
                                        var itemId = e.dataTransfer.getData('item-id');
                                        const nItem = document.getElementById(itemId).cloneNode(true);
                                        e.currentTarget.replaceChild(nItem, e.currentTarget.childNodes[0]);
                                    }}
                        >
                            <div key={i + '-' + j}
                                style={{ padding: '20px',backgroundColor: 'lightblue', border: '1px solid #ccc'}}
                            > {
                                courses[Math.floor(Math.random() * courses.length)]

                            }</div>
                        </div>
                    })
                })
            }

        </div>
        <div style={{margin: '5vw 5vw'}}>
            <div id="course-wuli"
                 style={{padding: '20px', width: 'fit-content', backgroundColor: 'lightblue', border: '1px solid #ccc'}}
                 draggable={true}
                 onDragStart={(e) => {
                     e.dataTransfer.setData('item-id', 'course-wuli');
                 }}
            >物理
            </div>

            <div id="course-computer"
                 style={{padding: '20px', width: 'fit-content', backgroundColor: 'lightblue', border: '1px solid #ccc'}}
                 draggable={true}
                 onDragStart={(e) => {
                     e.dataTransfer.setData('item-id', 'course-computer');
                 }}
            >电脑
            </div>
        </div>
    </div>
}

html5 drag and drop

HTML5 拖放 | 菜鸟教程

        drag and drop api 可以参考上面菜鸟文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值