拖拽删除元素、拖拽排序、拖拽预览图片和拖拽移动元素

news2024/11/17 0:56:31

介绍

HTML5 提供了专门的拖拽与拖放的 API,目前各浏览器都已支持,包括 IE。HTML 拖放(Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能。例如,用户可使用鼠标选择可拖拽(draggable)元素,将元素拖拽到可放置(droppable)元素,并释放鼠标按钮以放置这些元素。

事件类型

事件On 型事件处理程序触发时刻
dragondrag当拖拽元素或选中的文本时触发。
dragendondragend当拖拽操作结束时触发 (比如松开鼠标按键或敲 Esc 键)。
dragenterondragenter当拖拽元素或选中的文本到一个可释放目标时触发。
dragleaveondragleave当拖拽元素或选中的文本离开一个可释放目标时触发。
dragoverondragover当元素或选中的文本被拖到一个可释放目标上时触发(每 100 毫秒触发一次)。
dragstartondragstart当用户开始拖拽一个元素或选中的文本时触发。
dropondrop当元素或选中的文本在可释放目标上被释放时触发。

注意:当从操作系统向浏览器中拖拽文件时,不会触发 dragstart 和dragend 事件。

接口

给应用程序添加 HTML 拖放功能,主要使用 DragEvent 和 DataTransfer 这两个接口。

DragEvent

继承自 MouseEvent,有一个 dataTransfer 属性(DataTransfer 对象),在拖放交互期间传输的数据主要通过这个属性完成。

DataTransfer

保存着拖拽操作中的数据,例如拖拽事件的类型(如拷贝 copy 或者移动 move),拖拽的数据(一个或者多个项)和每个拖拽项的类型(MIME 类型)。

items 属性

包含包含所有拖动数据 DataTransferItem 对象的列表(DataTransferItemList 对象,包括 add、remove 和 clear 方法)。一个 DataTransferItem 代表一个拖拽项目,每个项目都有一个 kind 属性(值为 string 或 file)和一个表示数据项目 MIME 类型的 type 属性。DataTransferItem 对象也有获取拖拽项目数据的方法:DataTransferItem.getAsFile() 和 DataTransferItem.getAsString()。

DataTransfer 对象使用同步的 getData() 方法去得到拖拽项的数据,而 DataTransferItem 对象使用异步的 getAsString() 方法得到拖拽项的数据。

files 属性

包含数据传输中可用的所有本地文件的列表(FileList 对象)。如果拖动操作不涉及拖动文件,则此属性为空列表。

HTML draggable 属性

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

  • 拖拽选中文本、拖拽图像和拖拽链接时,会使用默认拖拽行为。
  • 拖拽图像或链接时,图像或链接的 URL 被设定为拖拽数据。
  • 对于其他元素,只有当它们作为被选中的一部分时,才会触发默认拖拽行为。

除了图像、链接和选择的文本默认的可拖拽行为之外,其他元素在默认情况下是不可拖拽的。如果要使其他的 HTML 元素可拖拽:

1.将想要拖拽的元素的 draggable 属性设置成 draggable=“true”。
2.为 dragstart 事件添加监听。
3.在定义的监听中设置拖拽数据。

<p draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'This text may be dragged')">This text <strong>may</strong> be dragged.
</p> 

拖拽删除元素

拖拽右侧的列表项目到左侧时,在列表项目元素中通过 ondragstart 事件获取到当前的拖拽元素,然后在左侧容器元素中通过 ondrop 事件根据当前的拖拽元素,可以删除该列表项目。

拖拽排序

拖拽列表项目时,在列表项目元素中通过 dragstart 事件获取到当前的拖拽元素和事件的 offsetY,然后在列表容器元素中通过 dragover 事件,根据当前拖拽移动在上面的列表元素事件的 offsetY,对比当前拖拽中的元素的 offsetY,对当前拖拽移动在上面的列表元素进行 before 或 after 操作。

拖拽预览图片

从本地拖拽文件到页面中时,通过获取 DragEvent 的 DataTransfer 对象的 files 属性,然后由 URL.createObjectURL 创建对象 URL,可以预览该图片。

拖拽效果

HTML Drag and Drop API 方便了我们对拖拽数据的处理,如果需要实现 HTML 元素的拖拽移动,更加方便地是使用 mouse 事件。

1.设置要拖拽的元素绝对定位或是相对定位(position:absolute/relative)。
2.监听 onmousedown、onmouseup 和 onmousemove 事件,获取 clientX 和 clientY。
3.将获取到的 clientX 和 clientY 赋值给元素的 CSS 属性 left 和 top。

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenGov的首个方案已上线Moonriver

随着公投128的通过&#xff0c;作为Runtime 2100的一部分&#xff0c;Moonbeam在Moonriver上推出了OpenGov。Moonbeam上的OpenGov部署将从Moonriver开始&#xff0c;以获得社区反馈。未来将举行公投&#xff0c;让社区来决定OpenGov如何发展并转移至Moonbeam。 Moonriver上的O…

Airbyte架构

作为一款技术复杂的数据集成管道&#xff0c;Airbyte的架构模式非常清晰明了。Airbyte应用模式Airbyte管道架构UI&#xff1a;一个易于使用的图形界面&#xff0c;用于与Airbyte API进行交互。WebApp Server&#xff1a;处理 UI 和 API 之间的连接。Config Store&#xff1a;存…

Java中安装JDK环境–javac命令无效

Java中安装JDK环境–javac命令无效 一&#xff0c;安装JDK1.8 阿里云盘地址推荐 我们可以选择安装地址&#xff0c;这个地址是我们用来配置环境变量的&#xff0c;唯一注意的是这个&#xff0c;其他的都是默认下一步。直至安装完成&#xff0c;jdk下载地址https://www.oracl…

驱动程序开发:基于ICM20608六轴传感器 --- 使用Regmap API 的 SPI 读取数据 之 IIO驱动

目录一、IIO 子系统简介二、IIO子系统使用的一些相关的结构体、函数等1、iio_dev 结构体  ①modes&#xff1a;是选择iio驱动设备支持的工作模式&#xff0c;模式分别有如下&#xff1a;  ②dev&#xff1a;其是一个设备结构体。  ②channels&#xff1a;为 IIO 设备通道…

spring boot的包扫描范围

目录标题一、误解二、正确的理解三、不同包也能扫描到Bean的方法一、误解 一开始我一直以为spring boot默认的包扫描范围是启动类的同级目录和子目录下的Bean。其实正真是与启动类在同个包以及子包下的Bean。 我一直误解了包的概念&#xff0c;包并不是只文件夹&#xff08;文…

vscode远程调试python

目的 注意&#xff1a;这里我们想要实现的是&#xff1a;用vscode 使用remote ssh打开project&#xff0c;然后直接在project里面进行debug&#xff0c;而不需要 在本地vscode目录打开一样的project。 假设大家已经会使用remote ssh打开远程服务器的代码了&#xff0c;那么只…

Qt——QLineEdit

QLineEdit是一个单行文本编辑控件。 使用者可以通过很多函数&#xff0c;输入和编辑单行文本&#xff0c;比如撤销、恢复、剪切、粘贴以及拖放等。 通过改变QLineEdit的 echoMode() &#xff0c;可以设置其属性&#xff0c;比如以密码的形式输入。 文本的长度可以由 maxLength(…

ctf pwn基础-2

今天学了一个保护的绕过&#xff0c;这里讲一讲&#xff0c;这个好像是使用的是格式化字符串漏洞。 目录 基础 实例讲解 基础 首先我们要知道什么是canary保护&#xff0c;就是在入栈EBP以后加一个Canary 我可能讲的不是很好&#xff0c;大家可以看看这些 文章 用通俗一点将就…

C++问答汇总_2023自用

C是一种通用编程语言&#xff0c;具有高级抽象、强类型和编译性能等特点。C语言具有许多特性&#xff0c;包括面向对象编程、模板、多态、运算符重载等等。它广泛应用于各种领域&#xff0c;如系统软件、嵌入式系统、游戏开发、科学计算等等。 1、C11相对于C98的新特性&#xf…

Redis的安装部署和配置文件的修改

1、准备安装环境 由于 Redis 是基于 C 语言编写的&#xff0c;因此首先需要安装 Redis 所需要的依赖&#xff1a; yum install -y gcc tcl gcc-c make 2、上传安装文件 将下载好的 redis-6.2.7.tar.gz 安装包上传到虚拟机的任意目录&#xff08;一般推荐上传到 /usr/local/s…

贝叶斯网络实践

目录 一。朴素贝叶斯的假设 二。朴素贝叶斯的推导 三。高斯朴素贝叶斯Gaussian Naive Bayes 四。多项分布朴素贝叶斯Multinomial Naive Bayes 五。以文本分类为例 1.分析 2.分解 3.拉普拉斯平滑 4.对朴素贝叶斯的思考 六。总结 七。word2vec 八。GaussianNB,…

【数据结构】Map 和 Set

目录二叉搜索树二叉搜索树---查找二叉搜索树---插入二叉搜索树---删除Map和SetMap的使用Set的使用哈希表哈希冲突冲突避免冲突解决冲突解决---闭散列冲突解决---开散列题目练习只出现一次的数复制带随机指针的链表宝石与石头旧键盘二叉搜索树 二叉搜索树也叫二叉排序树&#x…

(二十六)大白话如何从底层原理解决生产的Too many connections故障?

今天我们继续讲解昨天的那个案例背景&#xff0c;其实就是经典的Too many connections故障&#xff0c;他的核心就是linux的文件句柄限制&#xff0c;导致了MySQL的最大连接数被限制&#xff0c;那么今天来讲讲怎么解决这个问题。 其实核心就是一行命令&#xff1a; ulimit -H…

分布式面试题

目录 分布式id的生成方案有哪些 雪花算法生成的ID由哪些部分组成 分布式锁在项目中有哪些应用场景? 分布式锁有哪些解决方案 Redis做分布式锁用什么命令 Redis做分布式锁&#xff0c;死锁有哪些情况&#xff1f;如何解决 Redis如何做分布式锁 MySQL如何做分布式锁 什么…

代码签名即将迎来一波新关注

在数字化高度发展的当下&#xff0c;个人隐私及信息安全保护已经成了大家关注的重点&#xff0c;包括日常使用的电脑软件&#xff0c;手机APP等&#xff0c;由于包含了大量的用户信息&#xff0c;已经成了重点关注对象&#xff0c;任何一个疏忽就可能泄露大量用户信息。所以权威…

了解线程安全

线程安全是多线程的重点和难点。 线程安全概念 线程安全&#xff1a;在多线程的各种随机调度顺序下&#xff0c;代码没有bug&#xff0c;都能够符合预期的方式来执行&#xff0c;此时认为线程安全 线程不安全&#xff1a;如果在多线程随机调度下代码出现bug&#xff0c;此时…

Java Web:开篇综述与第一章

前言 翻开这本书&#xff0c;又是一段新的学习路线&#xff0c;在学习的道路上是枯燥的&#xff0c;是乏味的&#xff0c;难免有放弃的想法。但回看曾经的学习笔记&#xff0c;自己也一步一步走过来了&#xff0c;即使会自我怀疑自我否定&#xff0c;但不坚持不努力是永远没有…

#G. 求约数个数之六

我们先求到区间[1..b]之间的所有约数之和于是结果就等于 [1..b]之间的所有约数之和减去[1..a-1]之间的约数之和很明显这两个问题是同性质的问题&#xff0c;只是右端点不同罢了.明显对于1到N之间的数字&#xff0c;其约数范围也为1到N这个范围内。于是我们可以枚举约数L,当然这…

【ROS学习笔记1】ROS快速体验输出Hello World

【ROS学习笔记1】ROS快速体验输出Hello World 文章目录【ROS学习笔记1】ROS快速体验输出Hello World1.1 ROS快速体验1.1.1 Hello World快速实现简介1.1.2 Hello World的C实现1.1.3 Hello World的Python实现写在前面&#xff0c;本系列笔记参考的是AutoLabor的教程&#xff0c;具…

求职3个月,简历大多都石沉大海,一听是手工测试都纷纷摇头....太难了

距离被上家公司裁员已经过去了3个月了&#xff0c;3个月的求职经历真的让我痛不欲生&#xff0c;我也从中理解感叹到了很多&#xff0c;想写出来&#xff0c;告诫跟我一样的经历的人。 我今年26岁&#xff0c;大学是一所普通的大专&#xff0c;学的是机电专业&#xff0c;如何…