Js中六种拖拽(拉)事件(drag 和 drop)

news/2024/5/9 4:28:44/文章来源:https://blog.csdn.net/weixin_46022934/article/details/127375335

拖拽事件

今天同事问有没有实现过表格的拖拽功能,我当时想的是应该跟图片的拖拽代码逻辑是一样的主要是使用了浏览器中的以下几个事件
例如:
一、dragstart 二、dragend 三、dragover 四、dragenter 五、drop 等


文章目录

  • 拖拽事件
  • 前言(各个浏览器的兼容性)
    • 1.兼容性如下图:
  • 一、相关的五个事件api如下:
    • 拖拽流程说明:
      • 1.dragstart事件
      • 2.dragenter事件
      • 3.dragover事件
      • 4.drop事件(必须要dragover事件触发)
      • 5.dragend事件
    • MDN详细说明:
      • 链接如下
      • 如下图所示:
  • 二、相关的属性
    • 1.draggable(让元素可拖拽)
      • draggable解释说明:
      • 使用代码如下:
      • 如下图所示:
    • 2.dataTransfer(对应的拖拽媒介)
      • 解释说明(通用方法):
        • `1.DataTransfer.clearData()`
        • `2.DataTransfer.getData()`
        • `3.DataTransfer.setData()`
        • `4.DataTransfer.setDragImage()`
      • 代码如下(示例):
      • 官网🔗如下
    • 3.preventDefault(阻止默认事件)
    • 4.Event.effectAllowed (拖拽的效果)
  • 案例一:自定义div拖拽如下🔗 👇👇
  • 案例二:两种表格拖拽方法🔗 👇👇
  • 总结(后续会持续的更新)


前言(各个浏览器的兼容性)

提示:HTML5专门提供的拖拽功能,以后就不用使用mouseover等事件了。遇到这类的效果也不用一直折腾了

1.兼容性如下图:

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、相关的五个事件api如下:

拖拽流程说明:

HTML 拖拽(Drag and Drop)使应用程序能够在浏览器中使用拖放功能
例如,用户可使用鼠标选择可拖拽(draggable)元素,将元素拖拽到可放置(droppable)元素,并释放鼠标按钮以放置这些元素。
拖拽操作期间,会有一个可拖拽元素的半透明快照跟随着鼠标指针

1.dragstart事件

dragstart类似于鼠标按下事件:当元素开始被拖拽的时候触发的事件
作用于:被拖拽的元素

2.dragenter事件

dragenter类似于鼠标进入元素的事件:当拖拽的元素进入目标元素的上方时,触发的事件
作用于:目标元素

3.dragover事件

dragover类似于鼠标在某元素上的事件:拖拽元素在目标元素上移动的时候触发的事件
作用于:目标元素

4.drop事件(必须要dragover事件触发)

drop类似于鼠标松开的事件:被拖拽的元素在目标元素上,鼠标放开触发的事件
作用于:目标元素

5.dragend事件

类似于鼠标松开的事件:当拖拽完成后触发的事件
作用于:被拖拽的元素

MDN详细说明:

链接如下

MDN拖拽解析

如下图所示:

在这里插入图片描述

二、相关的属性

1.draggable(让元素可拖拽)

draggable解释说明:

draggable用于标识元素是否允许使用 拖放操作 API (en-US) 拖动。

draggable的取值如下:
true,表示元素可以被拖动false,表示元素不可以被拖动如果该属性没有设值,则默认值 为 auto,表示使用浏览器定义的默认行为

这个属性是枚举类型,而不是布尔类型。这意味着必须显式指定值为 true 或者 false

使用代码如下:

<body><!-- 主体dom结构 --><ul><div class="trs" draggable="true">列表1</div><div class="trs" draggable="true">列表2</div><div class="trs" draggable="true">列表3</div><div class="trs" draggable="true">列表4</div><div class="trs" draggable="true">列表5</div></ul>
</body>

如下图所示:

在这里插入图片描述

2.dataTransfer(对应的拖拽媒介)

解释说明(通用方法):

退拽对象用来传递的媒介,使用一般为Event.dataTransfer

1.DataTransfer.clearData()

删除与给定类型关联的数据。类型参数是可选的。如果类型为空或未指定,则删除与所有类型关联的数据。如果指定类型的数据不存在,或者 data
transfer 中不包含任何数据,则该方法不会产生任何效果。

2.DataTransfer.getData()

检索给定类型的数据,如果该类型的数据不存在或 data transfer 不包含数据,则返回空字符串。

3.DataTransfer.setData()

设置给定类型的数据。如果该类型的数据不存在,则将其添加到末尾,以便类型列表中的最后一项将是新的格式。如果该类型的数据已经存在,则在相同位置替换现有数据。

4.DataTransfer.setDragImage()

用于设置自定义的拖动图像。

代码如下(示例):

// 在event事件对象上调用 dataTransfer 通过 setData(名称1,值1)
// 进行传递数据,通过 getData(名称1) 获取值;类似于sessionStorage(本地存储)
event.dataTransfer.setData('drag_text',event.target.innerHTML)  

官网🔗如下

DataTransfer解析

3.preventDefault(阻止默认事件)

preventDefault() 这哥事件大家应该已经非常熟悉了,就是阻止事件的默认事件

在这里的主要作用是,在dragstart这个事件的时候,不能使用 preventDefault 阻止默认事件,
使用了preventDefault的后果就是,不能进行拖拽!!!!!!!!所以这里要注意⚠️⚠️

4.Event.effectAllowed (拖拽的效果)

拖拽效果的一个设置


案例一:自定义div拖拽如下🔗 👇👇

简单的自定义拖拽实现效果

案例二:两种表格拖拽方法🔗 👇👇

原生JS 和 vue-draggable 实现拖拽效果

总结(后续会持续的更新)

提示:案例一主要是为了,让部分人更好的去熟悉Api的使用,所以会有很多的漏洞,大家主要以参考为主;案例二:对于表格的操作相对成熟,包含了组件库的使用,和两种原声Js的拖拽写法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_404383.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于matlab的神经网络设计,深度神经网络代码matlab

为什么谈论深度学习工具时&#xff0c;很少有人讨论matlab的神经网络工具包 首先深度学习不光是在学术界非常火热, 在工业界也有着大量的运用, 这就要求深度学习框架要方便在服务器上部署, 而这个恰恰是Matlab的软肋, 想象一下你前端用个Django做个页面接受用户输入的图像, 后…

【Linux驱动开发】并发控制机制:原子操作、自旋锁、信号量、互斥锁详解

并发控制机制 首先我们来了解一下 “操作系统的并发性” 这个概念&#xff1a; 操作系统的并发性(concurrence)&#xff1a;指的是两个或者两个以上事件在同一时间间隔内发生&#xff0c;即这个设备一会执行这个事件一会执行那个事件&#xff0c;多个事件共同使用一个设备。 操…

yolov5和yolov7之实例分割训练

还没来得及实验&#xff0c;我在这里就给出几个参考的链接 1、How to train your segmentation data with seg in U7? What is the data set format?Thanks&#xff01;&#xff01; Issue #732 WongKinYiu/yolov7 GitHub 2、JSON2YOLO/general_json2yolo.py at master …

南大通用GBase8s 常用SQL语句(287)

UPDATE 语句 使用 UPDATE 语句来更改表或视图中一个或多个现有的行的一个或多个列中的值。 语法 Target WHERE 选项 元素 描述 限制 语法 alias 您在此为本地表或远程表声明的临时的名称 如果 SET 是 alias 的标识符&#xff0c;则 AS 关键字必须在 alias 之前 …

计算机网络(六) | 应用层:HTTP协议详解

目录HTTP协议HTTP协议简介理解应用层协议HTTP协议的工作过程HTTP协议格式Fiddler的简介Fiddler的使用HTTP请求格式概述HTTP响应格式概述HTTP请求格式详解URL方法请求报头请求正文(body)HTTP响应格式详解状态码响应报头响应正文(body)构造HTTP请求form表单构造HTTP请求通过ajax构…

Unity9 路径权限、场景的加载、异步加载、场景跳转

Application类 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ApplicationTest : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//游戏数据文件夹路径 只读、加密压缩Debug.Log(Application…

华为云数据库GaussDB(for MySQL)携高新技术强势而来

华为云数据库GaussDB(for MySQL)携高新技术强势而来 企业数据库堪比人的心脏一样重要&#xff0c;不仅要承担企业数据存储、维护、管理、分析等任务&#xff0c;还要保证企业数据的完整性和准确性&#xff0c;并且需要承载着对其他业务系统或客户信息进行整合处理的功能&#x…

网课搜题公众号在线查题系统

网课搜题公众号在线查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xf…

【学习笔记】JSP内置对象

JSP内置对象pageContextRequestResponseconfig [ServletConfig]outApplication [ServletContext]pageexceptionsession 其中,pageContext、Request、Application、session 用于存储数据 它们都使用setAttribute() 来存数据 <% pageContext.setAttribute("name1&quo…

Dubbo的简单使用

一、架构演进 发展演变1.1 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。 缺点性能扩展…

操作系统:文件IO

文章目录文件描述符文件描述符池基本文件操作openopen返回文件描述符的规则open的文件描述符与fopen的文件指针closewritereadlseekfcntl共享文件操作同一进程&#xff0c;多次open同一文件多个进程&#xff0c;多次open同一文件dupdup2利用dup、dup2实现重定位高级文件IO非阻塞…

【网络安全-键盘监视】学会以后去捉弄舍友,看他有了什么不可告人的秘密

&#x1f343;博主昵称&#xff1a;一拳必胜客 博主主页面链接&#xff1a;博主主页传送门 博主专栏页面连接&#xff1a;专栏传送门–计算机考研 &#x1f351;创作初心&#xff1a;本博客的初心是每天分享记录自己学习的脚步&#xff0c;和各位技术友探讨交流&#xff0c;同时…

通过jmap、jstack分析问题,以及分析方法

一、问题 多批次导入任务&#xff0c;会出现异步线程停止工作的情况&#xff0c;后续无论导入多少任务&#xff0c;异步线程都不会执行&#xff0c;只有重启能解决。 二、工具使用 进入jdk的bin目录&#xff1a; cd /beeb/ap/uip/jdk1.8.0_231/bin 2.1 拉取jstack日志&…

setContentView源码解析

一、引言 本文将解析activity加载布局文件的setContentView源码&#xff0c;由于会涉及到部分activity的启动流程&#xff0c;这里附上一张activity启动流程图&#xff1a; 关于 setContentView 源码分两种情况&#xff0c;因为我们的 activity 有两个&#xff1a; 一种是继…

halcon脚本-边缘及骨架的识别【附源码】

文章目录前言一、原图1.边缘图2.骨架图二、实现思路1.边缘图2.骨架图三、halcon脚本实现1.边缘图2.骨架图四、实现效果1.边缘图2.骨架图前言 本文实现基于图像进行边缘或者骨架的识别&#xff0c;可实现让机器人画画 一、原图 1.边缘图 2.骨架图 二、实现思路 1.边缘图 提取…

【阅读】一周翻过《构建之法》,笔记整理

文章目录&#x1f6a9; 前言&#x1f966; 阅读笔记&#x1f33e; 结语&#x1f6a9; 前言 我的阅读方式 我拿到这本书挺久了&#xff0c;之前已经零散地看过一部分&#xff0c;最近一周集中地花了一些时间&#xff0c;将整本书看过了一遍。看得比较粗略&#xff0c;正如“好读…

怎么管理员工混工时的现象?

如果员工存在混工时&#xff0c;这表明公司的管理存在漏洞。让懒散的员工认为自己可以混日子&#xff0c;让没有绩效考核的员工默认可以混日子&#xff0c;同时让对公司感到失望的员工可以完全躺平等待被公司解雇。 工时管理一直是企业需求与痛点。特别是在疫情时期&#xff0c…

华为云数据库GaussDB 为企业核心数据运行提供优质保障

华为云数据库GaussDB 为企业核心数据运行提供优质保障 在网络信息科学技术不断发展的今天&#xff0c;海量存储信息数据中大量的存储资源被浪费&#xff1f;你有没有遇见信息数据备份恢复很慢的情况&#xff1f;让人特别的烦躁&#xff0c;特别是企业遇见了这些情况&#xff0c…

JDBC工具类和JDBC登录案例

JDBC工具类: 抽取JDBC工具类:JDBCUtils 目的:简化书写 分析∶ 1.注册驱动也抽取 2.抽取一个方法获取连接对象 3.抽取一个方法释放资源 代码实现:/*** JDBC工具类*/ public class JDBCUtils {private static String url;private static String user;private static Strin…

Cadence Allegro PCB设计88问解析(十一) 之 Allegro中文件自动保存时间设置

一个学习信号完整性的layout工程师 大家在设计图纸或者编辑文档时&#xff0c;最常点击的应该就是保存图标了。谁也不想因为软件闪退、电脑断电等情况&#xff0c;我们的劳动成果就白白的消失了。在我们用Allegro进行PCB设计&#xff0c;就会有一个自动保存的功能&#xff0c;每…