课表,拖拽

html 复制代码
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        table {
            border-collapse: collapse;
        }

        th {
            border: 1px solid #000;
            width: 100px;
            height: 50px;
            text-align: center;
        }

        td {
            border: 1px solid #000;
            width: 100px;
            height: 50px;
            text-align: center;
        }

        .container {
            display: flex;
        }

        .left {
            width: 120px;
            border: 1px solid #000;
            overflow: auto;
        }

        .item {
            width: 100px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            border: 1px solid #000;
            margin: 10px;
        }

        .hover {
            background: #ccc;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="left" data-drop="move">
        <div data-effect="copy" draggable="true" class="item" style="background: blue">语文</div>
        <div data-effect="copy" draggable="true" class="item" style="background: green">英语</div>
        <div data-effect="copy" draggable="true" class="item" style="background: red">数学</div>
        <div data-effect="copy" draggable="true" class="item" style="background: yellowgreen">科学</div>
        <div data-effect="copy" draggable="true" class="item" style="background: teal">物理</div>
        <div data-effect="copy" draggable="true" class="item" style="background: blueviolet">化学</div>
        <div data-effect="copy" draggable="true" class="item" style="background: aqua">食物</div>
        <div data-effect="copy" draggable="true" class="item" style="background: saddlebrown">美食</div>
        <div data-effect="copy" draggable="true" class="item" style="background: hotpink">足球</div>
    </div>
    <div class="right">
        <table>
            <tr>
                <th></th>
                <th>星期一</th>
                <th>星期二</th>
                <th>星期三</th>
                <th>星期四</th>
                <th>星期五</th>
                <th>星期六</th>
                <th>星期日</th>
            </tr>
            <tr>
                <td rowspan="2">早自习</td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td rowspan="4">上午</td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td rowspan="4">下午</td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td rowspan="2">晚自习</td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
            <tr>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
                <td data-drop="copy"></td>
            </tr>
        </table>
    </div>
</div>
<script>
    const container = document.querySelector('.container');
    let sourceNode = null;
    function getDropNode(node) {
        while (node) {
            if (node?.dataset?.drop) {
                return node;
            }
            node = node?.parentNode;
        }
    }
    function clearDropStyle() {
        const dropNodes = document.querySelectorAll('[data-drop]');
        dropNodes.forEach(node => {
            node.classList.remove('hover');
        })
    }
    container.addEventListener('dragstart', function (e) {
        e.dataTransfer.effectAllowed = e.target.dataset.effect;
        sourceNode = e.target;
    })
    container.addEventListener('dragover', function (e) {
        e.preventDefault();
    });
    container.addEventListener('dragenter', function (e) {
        clearDropStyle();
        const dropNode = getDropNode(e.target);
        if (!dropNode) return;
        if (e.dataTransfer.effectAllowed === dropNode.dataset.drop) {
            dropNode.classList.add('hover');
        }
    })
    container.addEventListener('drop', function (e) {
        clearDropStyle();
        const dropNode = getDropNode(e.target);
        if (!dropNode) return;
        if (e.dataTransfer.effectAllowed != dropNode.dataset.drop) return;
        if (e.dataTransfer.effectAllowed === 'copy') {
            dropNode.innerHTML = ''
            const clone = sourceNode.cloneNode(true);
            clone.dataset.effect = 'move';
            dropNode.appendChild(clone);
        } else {
            sourceNode.remove();
        }
    })
</script>
</body>
</html>
相关推荐
高级程序源25 分钟前
django大学生创新创业项目管理系统94923-计算机课程设计、毕业设计
javascript·vue.js·spring boot·后端·python·django·课程设计
泡海椒31 分钟前
规则引擎对比:JQuick-Java vs Drools 轻量场景选型对比
java·开发语言
八荒启·交互动画37 分钟前
# Web特效020—让 Web 特效真正动起来:时间循环应该怎么接
前端·webgl·网页特效·八荒启-交互动画·八荒启
动恰客流统计39 分钟前
线下零售数字化浪潮下,客流统计的3个核心发展趋势
大数据·前端·人工智能
泡泡鱼(敲代码中)1 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
lizz22761 小时前
Babel插件手册
javascript
2501_933670791 小时前
平台招商运营校招能力模型:数据分析、SQL与增长场景拆解
开发语言
用户938515635071 小时前
从小米前端面试题,彻底搞懂闭包、作用域链与 useState 惰性初始化
前端·面试
菜鸟~noob2332 小时前
【Bonjour】华为Peerium架构深度解析:从冯·诺依曼到百万处理器“一台计算机”,附MATLAB性能仿真【含matlab代码,可直接运行】
开发语言·matlab·华为·peerium
粥里有勺糖2 小时前
视野修炼第133期 | Native 回春了?
前端·github·agent