当前位置: 首页 > news >正文

HTML拖拽功能(纯html5+JS实现)

1、HTML拖拽--单元行拖动

<!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>.list {padding: 0;margin: 0;padding-top: 10px;width: 500px;border: 1px solid;display: flex;flex-flow: column;align-items: center;justify-content: center;margin: 0 auto;list-style: none;/* 去除ul小点 */}.list-item {user-select: none;width: 400px;height: 45px;line-height: 45px;text-align: center;border: 1px solid;margin-bottom: 10px;/* 渐变背景 */background: linear-gradient(to right, #e9afaa, #51b9ff);cursor: move;color: #fff;border-radius: 5px;}/*移动中样式*/.list-item.moving {background: transparent;color: transparent;border: 1px dashed #ccc;}</style>
</head><body><ul class="list"><li draggable="true" class="list-item">1</li><li draggable="true" class="list-item">2</li><li draggable="true" class="list-item">3</li><li draggable="true" class="list-item">4</li><li draggable="true" class="list-item">5</li><li draggable="true" class="list-item">6</li><li draggable="true" class="list-item">7</li><li draggable="true" class="list-item">8</li></ul><script>/*(1)获取父元素dom*/const list = document.querySelector('.list');let sourceNode; //当前在拖动的节点/*拖动开始-- 当前选中节点增加样式*/list.ondragstart = e => {setTimeout(() => {e.target.classList.add('moving')//给当前选中增加样式}, 0);sourceNode = e.target e.dataTransfer.effectAllowed = 'move';//允许移动操作}/*拖动在目标区域移动*/list.ondragover = e => {e.preventDefault() // 允许放置}/*拖动进入目标区域 */list.ondragenter = e => {e.preventDefault(); // 允许放置if (e.target === list || e.target === sourceNode) {return}const children = Array.from(list.children) //创建新数组进行操作const sourceIndex = children.indexOf(sourceNode) //获取拖动开始下标const targetIndex = children.indexOf(e.target)   //获取当前下标/*位置挪动*/if (sourceIndex < targetIndex) {list.insertBefore(sourceNode, e.target.nextElementSibling)} else {list.insertBefore(sourceNode, e.target)}}/*拖动结束-- 重置拖动样式状态*/list.ondragend = e => {e.target.classList.remove('moving')}</script>
</body></html>

2、HTML拖拽--九宫格拖动

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>html_拖动-九宫格</title><style>.list {padding: 0;margin: 0;padding-top: 10px;width: 660px;border: 1px solid;display: flex;flex-wrap: wrap;margin: 0 auto;list-style: none;/* 去除ul小点 */}.list-item {box-sizing: border-box;cursor: move;display: inline-block;user-select: none;width: 200px;height: 200px;margin-bottom: 10px;/* 渐变背景 */background: linear-gradient(to right, #e9afaa, #51b9ff);border: 1px solid;color: #fff;border-radius: 10px;margin:10px 10px;display: flex;align-items: center;justify-content: center;}/*移动中样式*/.list-item.moving {opacity: 0.5;/* background: transparent; *//* color: transparent; */border: 1px dashed #ccc;}</style>
</head><body><ul class="list"><li draggable="true" class="list-item">1</li><li draggable="true" class="list-item">2</li><li draggable="true" class="list-item">3</li><li draggable="true" class="list-item">4</li><li draggable="true" class="list-item">5</li><li draggable="true" class="list-item">6</li><li draggable="true" class="list-item">7</li><li draggable="true" class="list-item">8</li><li draggable="true" class="list-item">9</li></ul><script>/*(1)获取父元素dom*/const list = document.querySelector('.list');let sourceNode; //当前在拖动的节点/*拖动开始-- 当前选中节点增加样式*/list.ondragstart = e => {setTimeout(() => {e.target.classList.add('moving')//给当前选中增加样式}, 0);sourceNode = e.targete.dataTransfer.effectAllowed = 'move';//允许移动操作}/*拖动在目标区域移动*/list.ondragover = e => {e.preventDefault() // 允许放置}/*拖动进入目标区域 */list.ondragenter = e => {e.preventDefault(); // 允许放置if (e.target === list || e.target === sourceNode) {return}const children = Array.from(list.children) //创建新数组进行操作const sourceIndex = children.indexOf(sourceNode) //获取拖动开始下标const targetIndex = children.indexOf(e.target)   //获取当前下标/*位置挪动*/if (sourceIndex < targetIndex) {list.insertBefore(sourceNode, e.target.nextElementSibling)} else {list.insertBefore(sourceNode, e.target)}}/*拖动结束-- 重置拖动样式状态*/list.ondragend = e => {e.target.classList.remove('moving')}</script>
</body></html>

3、html拖拽事件

 在HTML和JavaScript中,拖放操作涉及多个事件,这些事件可以让你在不同的阶段处理拖放行为。ondragenter 是其中一个事件,它在拖动元素进入目标元素的边界时触发。以下是拖放操作中常用的事件及其用途:

1、dragstart

  • 触发时机拖动操作开始时触发
  • 用途:可以用来设置拖动数据和拖动效果。
  • 示例
javascriptelement.ondragstart = function(event) {event.dataTransfer.setData("text/plain", event.target.id);
};

2. drag

  • 触发时机拖动过程中不断触发
  • 用途:可以用来提供拖动过程中的反馈,例如更新拖动图标或状态。
  • 示例
javascriptelement.ondrag = function(event) {// 更新拖动状态
};

3. dragenter

  • 触发时机拖动元素进入目标元素的边界时触发
  • 用途:可以用来设置目标元素的样式,表示可以放置。
  • 示例
javascripttargetElement.ondragenter = function(event) {event.target.style.border = "2px dashed #000";
};

4. dragover

  • 触发时机拖动元素在目标元素上移动时触发
  • 用途:可以用来设置放置效果,例如允许或禁止放置。
  • 示例
javascripttargetElement.ondragover = function(event) {event.preventDefault(); // 允许放置
};

5. dragleave

  • 触发时机拖动元素离开目标元素的边界时触发
  • 用途:可以用来重置目标元素的样式。
  • 示例
javascripttargetElement.ondragleave = function(event) {event.target.style.border = "none";
};

6. drop

  • 触发时机在目标元素上释放拖动元素时触发
  • 用途:可以用来处理放置操作,例如获取拖动数据并进行处理。
  • 示例
javascripttargetElement.ondrop = function(event) {event.preventDefault();const data = event.dataTransfer.getData("text/plain");const draggedElement = document.getElementById(data);// 处理放置操作
};

7. dragend

  • 触发时机拖动操作结束时触发,无论是在目标元素上释放还是取消拖动
  • 用途:可以用来重置拖动状态和样式。
  • 示例
javascriptelement.ondragend = function(event) {// 重置拖动状态
};

http://www.lryc.cn/news/521485.html

相关文章:

  • mysql 等保处理,设置wait_timeout引发的问题
  • 7.STM32F407ZGT6-RTC
  • 重写(补充)
  • 30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <3>5分钟集成好druid并使用druid自带监控工具监控sql请求
  • 【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理
  • Oracle 分区索引简介
  • 【科技赋能未来】NDT2025第三届新能源数字科技大会全面启动!
  • Broker收到消息之后如何存储
  • Mysql--实战篇--SQL优化(查询优化器,常用的SQL优化方法,执行计划EXPLAIN,Mysql性能调优,慢日志开启和分析等)
  • BERT与CNN结合实现糖尿病相关医学问题多分类模型
  • rabbitmqp安装延迟队列
  • 深入探讨DICOM医学影像中的MPPS服务及其具体实现
  • 集合帖:区间问题
  • C#,入门教程(27)——应用程序(Application)的基础知识
  • 迅翼SwiftWing | ROS 固定翼开源仿真平台正式发布!
  • CSS 样式 box-sizing: border-box; 详细解读
  • FLASK创建下载
  • 漫话架构师|什么是系统架构设计师(开篇)
  • Web Socket
  • JavaSE学习心得(反射篇)
  • 使用FRP进行内网穿透
  • 长安“战疫”网络安全公益赛的一些随想
  • flutter 安卓端打包
  • Cesium中的CustomDataSource 详解
  • [Qt]常用控件介绍-按钮类控件-QPushButton、QRedioButton、QCheckBox、QToolButton控件
  • Windows 蓝牙驱动开发-安装蓝牙设备
  • element表格有横向滚动条时产生错位或者偏移(火狐浏览器)
  • C# 下 SQLite 并发操作与锁库问题的 5 种解决方案
  • 2025封禁指定国家ip-安装xtables-addons记录
  • 卷积神经02-CUDA+Pytorch环境安装