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

拖拽事件

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



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

提示: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>

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如下图所示:

在这里插入图片描述

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)  

   
   
  • 1
  • 2
  • 3

官网🔗如下

DataTransfer解析

3.preventDefault(阻止默认事件)

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

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

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

拖拽效果的一个设置


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

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

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

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

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

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

参考

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt,拖放(Drag and Drop)是指在图形界面,用户通过鼠标将一个可拖动的对象拖动到另一个可接受的目标对象上释放,实现数据的交互和操作。 Qt提供了一套强大的拖放框架,使开发者可以轻松地实现拖放功能。实现拖放一般需要以下几个步骤: 1. 设置拖动源:首先,需要将用户操作的对象设置为可拖动的源,通过调用QWidget的setDragEnabled()函数来实现。这样,用户就可以通过鼠标来拖动该对象了。 2. 设置拖放目标:然后,在接受拖放的目标对象上,需要设置该对象的属性来接受拖拽的数据。通常,可使用QWidget的setAcceptDrops()函数来设置目标对象。 3. 实现拖拽事件:在拖放操作过程,会触发一系列的事件,如mousePressEvent、mouseMoveEvent和mouseReleaseEvent等。我们需要在这些事件实现相关的逻辑。 4. 处理拖放数据:当数据被拖动到目标对象上时,会触发拖放事件。在拖放事件,我们可以通过QDropEvent的mimeData()函数获取拖放的数据。 5. 执行拖放操作:根据拖放事件获取的数据,我们可以执行相应的操作。比如,可以在拖放事件dropEvent()函数进行数据的处理。 通过以上步骤,我们就可以实现Qt的拖放功能。在实际应用,拖放功能被广泛应用于文件管理、图形编辑、表格操作等场景,极大地提升了用户的交互体验。 需要注意的是,Qt提供了许多拖放的高级功能,如拖放操作的反馈、自定义数据格式的拖放等。开发者可以根据具体需求来灵活运用这些功能,实现更加丰富和高效的拖放体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值