前端基础(四十):拖放功能的实现

news/2024/10/11 12:48:10/

效果

在这里插入图片描述

源码

html"><div class="draggable-wrap"><div class="draggable-box" draggable="true" data-json='{"name": "Lee"}'><h1>Lee</h1><div class="drop-box" data-json='{"name": "Lee"}'><svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path d="M639.996 1023.988H384.002l42.656-512.582h170.684z" fill="#ED5564"></path><pathd="M939.552 310.66l-295.43-42.936L512 0.012l-132.124 267.712L84.448 310.66l213.774 208.402-50.466 294.242L512 674.372l264.244 138.932-50.468-294.242z"fill="#FFCE54"></path><path d="M939.552 310.66L512 469.312l213.776 49.75z" fill="#F6BB42"></path><pathd="M512 874.648c-11.782 0-21.344 9.562-21.344 21.344v127.996h42.686v-127.996c0-11.782-9.562-21.344-21.342-21.344z"fill="#DA4453"></path><pathd="M512 469.312v205.06l264.244 138.932zM298.222 519.062l-50.466 294.242L512 469.312zM379.876 267.724L84.448 310.66 512 469.312zM512 0.012v469.3l132.122-201.588z"fill="#F6BB42"></path></svg></div></div><div class="draggable-box" draggable="true" data-json='{"name": "Tom"}'><h1>Tom</h1><div class="drop-box" data-json='{"name": "Tom"}'><svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path d="M639.996 1023.988H384.002l42.656-512.582h170.684z" fill="#ED5564"></path><pathd="M939.552 310.66l-295.43-42.936L512 0.012l-132.124 267.712L84.448 310.66l213.774 208.402-50.466 294.242L512 674.372l264.244 138.932-50.468-294.242z"fill="#FFCE54"></path><path d="M939.552 310.66L512 469.312l213.776 49.75z" fill="#F6BB42"></path><pathd="M512 874.648c-11.782 0-21.344 9.562-21.344 21.344v127.996h42.686v-127.996c0-11.782-9.562-21.344-21.342-21.344z"fill="#DA4453"></path><pathd="M512 469.312v205.06l264.244 138.932zM298.222 519.062l-50.466 294.242L512 469.312zM379.876 267.724L84.448 310.66 512 469.312zM512 0.012v469.3l132.122-201.588z"fill="#F6BB42"></path></svg></div></div><div class="draggable-box" draggable="true" data-json='{"name": "Jerry"}'><h1>Jerry</h1><div class="drop-box" data-json='{"name": "Jerry"}'><svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path d="M639.996 1023.988H384.002l42.656-512.582h170.684z" fill="#ED5564"></path><pathd="M939.552 310.66l-295.43-42.936L512 0.012l-132.124 267.712L84.448 310.66l213.774 208.402-50.466 294.242L512 674.372l264.244 138.932-50.468-294.242z"fill="#FFCE54"></path><path d="M939.552 310.66L512 469.312l213.776 49.75z" fill="#F6BB42"></path><pathd="M512 874.648c-11.782 0-21.344 9.562-21.344 21.344v127.996h42.686v-127.996c0-11.782-9.562-21.344-21.342-21.344z"fill="#DA4453"></path><pathd="M512 469.312v205.06l264.244 138.932zM298.222 519.062l-50.466 294.242L512 469.312zM379.876 267.724L84.448 310.66 512 469.312zM512 0.012v469.3l132.122-201.588z"fill="#F6BB42"></path></svg></div></div>
</div>
css">body {margin: 0;user-select: none;
}.draggable-wrap {height: 100vh;display: flex;justify-content: center;align-items: center;gap: 80px;.draggable-box {position: relative;width: 240px;height: 140px;border: 3px solid black;scale: 1.2;h1 {text-align: center;}&:nth-child(1) {background-color: red;}&:nth-child(2) {background-color: green;}&:nth-child(3) {background-color: blue;}&[drag="start"] {opacity: .2;}&[drag="end"] {opacity: 1;}.drop-box {opacity: 0;position: absolute;top: 0;right: 0;bottom: 0;left: 0;border: 3px dashed black;background-color: rgba(0, 0, 0, .5);transition: 1s;display: flex;justify-content: center;align-items: center;gap: 20px;.icon {display: none;width: 80px;height: 80px;}&[drag="enter"] {opacity: 1;&::after {content: '';display: block;position: absolute;top: 0;right: 0;bottom: 0;left: 0;}.icon {display: block;}}&[drag="leave"] {opacity: 0;.icon {display: none;}}&[drag="drop"] {opacity: 1;.icon {display: block;}}}}
}
const draggables = document.querySelectorAll('.draggable-box');
const drops = document.querySelectorAll('.drop-box');draggables.forEach(el => {el.addEventListener('dragstart', e => {e.target.setAttribute('drag', 'start');e.dataTransfer.setData('data', e.target.getAttribute('data-json'));});el.addEventListener('dragend', e => {e.target.setAttribute('drag', 'end');});
});drops.forEach(el => {el.addEventListener('dragenter', e => {e.stopPropagation();e.target.setAttribute('drag', 'enter');});el.addEventListener('dragover', e => e.preventDefault());el.addEventListener('dragleave', e => {e.stopPropagation();e.target.setAttribute('drag', 'leave');});el.addEventListener('drop', e => {e.target.setAttribute('drag', 'drop');const source = JSON.parse(e.dataTransfer.getData('data'));const target = JSON.parse(e.target.getAttribute('data-json'));console.log(source, target);});
});

http://www.ppmy.cn/news/1537462.html

相关文章

【AD那些事 11】绘制PCB板时“隔离” 的那些事(笔记摘抄)

在设计新板子时发现需要考虑隔离&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;于是我在网上找了很多资料&#xff0c;摘抄了一些&#xff0c;整理了一下&#xff0c;作为笔记&#…

单体到微服务架构服务演化过程

单体到微服务架构服务演化过程 架构服务化 聊聊从单体到微服务架构服务演化过程 单体分层架构 在 Web 应用程序发展的早期&#xff0c;大部分工程是将所有的服务端功能模块打包到单个巨石型&#xff08;Monolith&#xff09;应用中&#xff0c;譬如很多企业的 Java 应用程序…

面向对象特性一:封装

一、封装概述 提起封装&#xff0c;大家并不陌生。前面我们学习方法时&#xff0c;就提起过&#xff0c;将具体功能封装到方法中&#xff0c;学习对象时&#xff0c;也提过将方法封装在类中&#xff0c;其实这些都是封装。 封装&#xff0c;它也是面向对象思想的特征之一。面…

MATLAB图像去雾系统

课题介绍 雾霾&#xff0c;它会使大气的能见度降低&#xff0c;景物图像发生退化&#xff0c;在雾霾下拍摄的图像内容模糊&#xff0c;对比度下降&#xff0c;这将会严重影响人们的行车系统&#xff0c;卫星系统&#xff0c;导航系统等。目前&#xff0c;拍摄器材成本还是比较…

基于FPGA的ov5640摄像头图像采集(二)

之前讲过ov5640摄像头图像采集&#xff0c;但是只包了的摄像头驱动与数据对齐两部分&#xff0c;但是由于摄像头输入的像素时钟与HDMI输出的驱动时钟并不相同&#xff0c;所有需要利用DDR3来将像素数据进行缓存再将像素数据从DDR3中读出&#xff0c;对DDR3的读写参考米联客的IP…

软件测试学习笔记丨MongoDB

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32359 一、MangoDB数据库 1.1 关系与非关系 1.1.1 关系型数据库 关系型数据库 MySQL&#xff0c;Oracle&#xff0c; SQLServer&#xff0c; Access…SQL&#xff08;结构化查询语句&#x…

数学建模算法与应用 第8章 时间序列分析

目录 8.1 确定性时间序列分析方法 Matlab代码示例&#xff1a;移动平均法提取趋势 8.2 平稳时间序列模型 Matlab代码示例&#xff1a;差分法与ADF检验 8.3 时间序列的Matlab相关工具箱及命令 Matlab代码示例&#xff1a;ARIMA模型的建立 8.4 ARIMA序列与季节性序列 Matl…

需求10——通过改一个小bug来学习如何定位问题

在浏览我之前完成的一些小需求时&#xff0c;我发现了一个非常有价值的需求。这个需求可以让我深入了解系统中关于故障上报的功能。通过完善这个需求&#xff0c;我能够全面掌握整个故障上报的流程。 这个需求主要是关于故障上报流程中出现的问题。当前的流程如下&#xff1a;…