首页 > 其他分享 >全栈的自我修养 ———— js中的拖拽api

全栈的自我修养 ———— js中的拖拽api

时间:2024-03-19 22:32:06浏览次数:21  
标签:container color js 全栈 api background table 20px 拖拽

今天让我们试一下js中的比较有趣味的拖拽api,用他来做成一个课程表!

一、实现目标

在这里插入图片描述

二、过程

1、html实现

第一步

创建一个container的拖拽区域,左边准备放课程,然后给每一个div设置同一个draggable为truetrue,即允许拖拽
在这里插入图片描述
在这里插入图片描述

第二步

然后创建两个table里面的格子分布如下所示

在这里插入图片描述
在这里插入图片描述

js实现

    <script>
    // container是可拖拽区域,超出这个范围无效
        const container = document.querySelector('.container');
	// 获得那两个table
        const table = document.querySelectorAll('.table')
        // 拖拽开始位置
        container.ondragstart = (e) => {
        	// 图表示拖拽
            e.dataTransfer.effectAllowed = 'move';
            // 将拖拽的文本内容设置在拖拽的参数里面
            e.dataTransfer.setData('text', e.target.innerText);
        }
        // 定义拖拽的过程(必不可少,因为这个过程一直记录拖拽的位置!!)
        container.ondragover = (e) => {
            e.preventDefault();
        }
        // 拖拽进入组件的事件
        // table.ondragenter = (e) => {
        // }
        // // 拖拽离开组件的事件
        // table.ondragleave = (e) => {
        // }
        // 给两个table的松手时候的位置设置拖拽事件
        table.forEach(item => {
            item.ondrop = (e) => {
                e.preventDefault();
                // 获得拖拽体中开始记录的文本内容
                const courseName = e.dataTransfer.getData('text');

                // 将拖拽到的区域填入文本内容
                e.target.innerHTML = `<td>${courseName}</td>`;
            }
        })

    </script>

在这里插入图片描述
在这里插入图片描述

三、源码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .container {
            display: flex;
        }

        .left {
            border-radius: 20px;
            margin: 0px 10px;
            background-color: rgba(62, 63, 63, 0.4);
            font-size: 30px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            padding: 20px 50px;
        }

        .right {
            border-radius: 20px;
            padding: 20px;
            background-color: rgba(62, 63, 63, 0.4);
        }

        .right table tr td {
            text-align: center;
            /* 水平居中文本 */
            vertical-align: middle;
            /* 垂直居中文本 */
            width: 20px;
            height: 20px;
        }

        .item {
            margin-bottom: 10px;
            padding: 10px 20px;
            border-radius: 10px;
            opacity: 0.8;
            float: left;
            white-space: nowrap;
        }

        tr {
            height: 50px;
        }

        .color1 {
            background-color: #ff0000;
        }

        .color2 {
            background-color: #00ff00;
        }

        .color3 {
            background-color: #0000ff;
        }

        .color4 {
            background-color: #ffff00;
        }

        .color5 {
            background-color: #ff00ff;
        }

        .color6 {
            background-color: #00ffff;
        }

        .color7 {
            background-color: #808080;
        }
    </style>
</head>

<body>
    <h1>课程表</h1>
    <div class="container">
        <div class="left">
            <div draggable="true" class="color1 item">语文</div>
            <div draggable="true" class="color2 item">数学</div>
            <div draggable="true" class="color3 item">英语</div>
            <div draggable="true" class="color4 item">音乐</div>
            <div draggable="true" class="color5 item">政治</div>
            <div draggable="true" class="color6 item">历史</div>
            <div draggable="true" class="color7 item">体育</div>
        </div>
        <div class="right">
            <table border="1" width="800px" height="270px" class="table">
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </table>
            <br><br><br>
            <table border="1" width="800px" height="270px" class="table" fixed>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </table>
        </div>
    </div>
    <script>
        const container = document.querySelector('.container');
        const table = document.querySelectorAll('.table')
        // 拖拽开始位置
        container.ondragstart = (e) => {
            e.dataTransfer.effectAllowed = 'move';
            console.log(e.target);
            e.dataTransfer.setData('text', e.target.innerText);
        }
        // 定义拖拽的过程
        container.ondragover = (e) => {
            e.preventDefault();
        }
        // 拖拽进入组件的事件
        // table.ondragenter = (e) => {
        // }
        // // 拖拽离开组件的事件
        // table.ondragleave = (e) => {
        // }
        // 松手时候的位置
        table.forEach(item => {
            item.ondrop = (e) => {
                e.preventDefault();
                const courseName = e.dataTransfer.getData('text');

                // 创建一个新单元格
                e.target.innerHTML = `<td>${courseName}</td>`;
            }
        })

    </script>
</body>

</html>

标签:container,color,js,全栈,api,background,table,20px,拖拽
From: https://blog.csdn.net/2401_82752568/article/details/136738131

相关文章

  • JS实现数组中重复数据合并
    //假设有一个包含数据对象的数组,其中的对象具有相同的name属性vardataArray=[ {name:'John',age:25,city:'NewYork',geometry:'A'}, {name:'Jane',age:30,city:'LosAngeles',geometry:'B'}, {name:'......
  • Node.js毕业设计飞机航班信息查询系统(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在当今信息化、智能化的社会背景下,飞机航班信息查询系统成为了人们出行的重要工具。随着航空业的快速发展,航班数量不断增加,航线网络日益复杂,人们对航班信息......
  • Node.js毕业设计飞机订票管理系统(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着航空运输业的迅速发展,飞机已经成为人们日常出行的重要交通工具之一。在现代社会,人们对航班信息、订票服务的需求日益增长,因此,构建一个高效、便捷的飞机......
  • Node.js毕业设计仿小红书app(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的迅猛发展,社交媒体应用已成为人们日常生活中不可或缺的一部分。小红书作为一款集社区分享、电商购物于一体的综合性平台,以其独特的内容推荐......
  • 【APIM】Azure API Management Self-Host Gateway是否可以把请求的日志发送到Applicat
    问题描述AzureAPIManagementSelf-HostGateway是否可以把请求的日志发送到ApplicationInsights呢?让它和使用Azure上托管的Gateway一样呢?这是在APIM门户上配置API,设置的DiagnosticsLogs,当选择ApplicationInsights时,就可以把对接口请求时候所携带的Header/Body等信息发送......
  • zhipuai的GLM-4模型API访问出现错误: ConnectError: TLS/SSL connection has been clo
    1简介访问zhipuai的GLM-4模型的API时,挂上梯子后访问失败,显示ConnectError:TLS/SSLconnectionhasbeenclosed(EOF)(_ssl.c:1131)报错信息如下{ "name":"ConnectError", "message":"TLS/SSLconnectionhasbeenclosed(EOF)(_ssl.c:1131)",......
  • 基于SSM框架的商城的设计与实现(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍随着电子商务的迅猛发展,网上购物已成为人们日常生活的一部分。基于SSM(Spring+SpringMVC+MyBatis)框架的商城系统因其轻量化、高效和易于维护等特点,成为......
  • 在线选课系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图 项目介绍在线选课系统作为现代教育体系中重要的信息化工具,它允许学生通过互联网进行课程选择,提高了教育管理的灵活性和效率。随着教学模式的多样化和个性化学习需求......
  • 基于携程旅行平台自由行的旅游线路管理信息系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着个性化旅游需求的增加,自由行成为越来越多旅行者的选择。基于携程旅行平台的自由行旅游线路管理信息系统,旨在为用户提供更加灵活、个性化的旅游规划服务。系......
  • 二手车市场商户管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着汽车消费市场的成熟和车辆更新换代的加快,二手车交易日益频繁,形成了庞大的二手车市场。针对市场中商户的管理而言,存在着信息杂乱、交易不透明、监管困难等问......