热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于HTML5中的拖拽的六种事件(持续更新Drag和drop事件)

拖拽事件(待更新)今天同事问有没有实现过表格的拖拽功能,我当时想的是应该跟图片的拖拽代码逻辑是一样的主要是使用了浏览器中的以下几个事件例如




拖拽事件(待更新)

今天同事问有没有实现过表格的拖拽功能,我当时想的是应该跟图片的拖拽代码逻辑是一样的主要是使用了浏览器中的以下几个事件
例如:
一、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>

<ul>
<div class&#61;"trs" draggable&#61;"true">列表1div>
<div class&#61;"trs" draggable&#61;"true">列表2div>
<div class&#61;"trs" draggable&#61;"true">列表3div>
<div class&#61;"trs" draggable&#61;"true">列表4div>
<div class&#61;"trs" draggable&#61;"true">列表5div>
ul>
body>

如下图所示&#xff1a;

在这里插入图片描述


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


解释说明&#xff08;通用方法&#xff09;&#xff1a;



退拽对象用来传递的媒介&#xff0c;使用一般为Event.dataTransfer



1.DataTransfer.clearData()



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



2.DataTransfer.getData()



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



3.DataTransfer.setData()



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



4.DataTransfer.setDragImage()



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



代码如下&#xff08;示例&#xff09;&#xff1a;

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

官网&#x1f517;如下

DataTransfer解析


3.preventDefault(阻止默认事件)

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



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



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

拖拽效果的一个设置




案例一&#xff1a;自定义div拖拽如下&#x1f517;

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


案例二&#xff1a;两种表格拖拽方法&#x1f517;

待完善&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff08;10.17本月一定发出来&#x1f4aa;&#x1f4aa;&#x1f4aa;&#xff09;


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

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







推荐阅读
  • “近年来最大计算机漏洞”被中国程序员发现!
    头条中国程序员,计算机漏洞头条(观察者网讯)据美联社12月11日报道,中国阿里云安全团队在Web服务器软件阿帕奇(Apache)下的开源日志组件Log4j内,发现一个漏洞Log4S ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Shiro 简单了解
    Shiro简单了解简单用过SpringSecurity安全框架后,再试试另一个安全框架——Shiro。1.Shiro简介ApacheShiro是一个强大且易用的Java安全框架:S ... [详细]
  • 淘宝http:ip.taobao.cominstructions.php接口说明请求接口(GET):servicegetIpInfo.ph ... [详细]
  • Spark 贝叶斯分类算法
    一、贝叶斯定理数学基础我们都知道条件概率的数学公式形式为即B发生的条件下A发生的概率等于A和B同时发生的概率除以B发生的概率。根据此公式变换,得到贝叶斯公式:即贝叶斯定律是关于随机 ... [详细]
  • react里可以但是vue我不熟悉,没找到App.vue是父`这里我想加载导航这是路由 ... [详细]
  • 缓冲区溢出实例(一)–Windows
    一、基本概念缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获 ... [详细]
  • 在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存在一些 ... [详细]
  • IE下PHPiframe跨域导致session丢失问题的解决方法|一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况)。主要是session无 ... [详细]
  • iOS网络开发(7)大牛们的杰作AFNetworking
    本篇文章介绍传说中的 AFN框架的使用AFNetworking是iOS开发中最广泛使用的开源项目之一,是最活跃最有影响力的开源项目之一。    ... [详细]
  • WebShell代码分析溯源(二)
    WebShell代码分析溯源(二)一、一句话变形马样本 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了解决MySQL数据库Error Code: 1030错误的方法和原因。通过检查文件权限和磁盘空间,注释掉innodb_force_recovery参数等步骤,可以解决无法插入数据和修改文件的问题。 ... [详细]
author-avatar
手机用户2502914971
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有