【HTML】HTML5的拖放你用了吗

2023-11-20

【HTML】HTML5的拖放你用了吗

引言

github:【HTML】HTML5的拖放你用了吗

内容速递:看了本文您能了解到的知识!

HTML5拖拽

在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。

拖放的操作,多用在拖拽排序列表、游戏拼图等。

下文中出现拖放拖拽表达同一个意思。

1、官方介绍

HTML 拖放(Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能。例如,用户可使用鼠标选择可拖拽(draggable)元素,将元素拖拽到可放置(droppable)元素,并释放鼠标按钮以放置这些元素。

拖拽操作期间,会有一个可拖拽元素的半透明快照跟随着鼠标指针。

2、文档

可以查看拖放的一些API,包含了相关接口的说明、在应用程序中加入拖放支持的基本步骤,以及相关接口的使用简介。

文档地址:官方文档

3、拖拽事件

主要有八个主要的事件,完成拖拽着歌过程一系列的事件响应。

事件 事件函数 触发时刻
drag ondrag 当拖拽元素或选中的文本时触发。
dragend ondragend 当拖拽操作结束时触发 (比如松开鼠标按键或敲“Esc”键).。
dragenter ondragenter 当拖拽元素或选中的文本到一个可释放目标时触发。
dragexit ondragexit 当元素变得不再是拖拽操作的选中目标时触发。
dragleave ondragleave 当拖拽元素或选中的文本离开一个可释放目标时触发。
dragover ondragover 当元素或选中的文本被拖到一个可释放目标上时触发(每100毫秒触发一次)。
dragstart ondragstart 当用户开始拖拽一个元素或选中的文本时触发。
drop ondrop 当元素或选中的文本在可释放目标上被释放时触发。

4、拖拽核心

4.1、什么是可拖拽的?

有同学问了,上面不是说任何元素都能够拖放吗?为啥我平时拖不动?

那平时拖动了,就不叫功能了,叫BUG!

为了使元素可拖动,需要把 draggable 属性设置为 true

<div draggable="true"></div>

4.2、拖起

通过ondragstart 事件,调用dataTransfer.setData() 方法设置被拖数据的数据类型和值。

<script>
  window.addEventListener('DOMContentLoaded', () => {
    const element = document.getElementById("p1");
    element.addEventListener("dragstart", (ev) => {
      ev.dataTransfer.setData("text/plain", ev.target.id);
    });
  });
</script>

<p id="p1" draggable="true">This element is draggable.</p>

4.3、拖拽数据

应用程序可以在拖拽操作中包含任意数量的数据项。每个数据项都是一个 string类型,典型的 MIME 类型,如:text/html

function dragstart_handler(ev) {
  // 添加拖拽数据
  ev.dataTransfer.setData("text/plain", ev.target.innerText);
  ev.dataTransfer.setData("text/html", ev.target.outerHTML);
  ev.dataTransfer.setData("text/uri-list", ev.target.ownerDocument.location.href);
}

想了解更多的xdm,可以查看 推荐拖拽类型 (en-US) 了解可拖拽的常见数据类型(如文本、HTML、链接和文件)。

4.4、拖拽图像

拖拽过程中,浏览器会在鼠标旁显示一张默认图片。

通过 setDragImage()方法自定义一张图片。

function dragstart_handler(ev) {
  var img = new Image();
  img.src = 'example.gif';
  ev.dataTransfer.setDragImage(img, 10, 10);
}

当然如果需要图片的样式,可以使用基本的拖拽数据类型。

4.5、拖拽效果

在拖拽的过程中,或者鼠标停留在元素上时的反馈有 3 个效果可以定义:

  1. copy 表明被拖拽的数据将从它原本的位置拷贝到目标的位置。
  2. move 表明被拖拽的数据将被移动。
  3. link 表明在拖拽源位置和目标位置之间将会创建一些关系表格或是连接。

通过dropEffect来设置

function dragstart_handler(ev) {
  ev.dataTransfer.dropEffect = "copy";
}

4.6、放置

当拖拽一个项目到 HTML 元素中时,浏览器默认不会有任何响应。

有拖起那么必有放置,除非你犟!不松下鼠标!

这里需要借助ondrop和ondragover两个事件来完成!dataTransfer.getData()来设置新的数据。

<script>
function dragover_handler(ev) {
 ev.preventDefault();
 ev.dataTransfer.dropEffect = "move";
}
function drop_handler(ev) {
 ev.preventDefault();
 var data = ev.dataTransfer.getData("text/plain");
 ev.target.appendChild(document.getElementById(data));
}
</script>

<p id="target" ondrop="drop_handler(event)" ondragover="dragover_handler(event)">Drop Zone</p>

5、一个拖拽案例

一个互相拖放的案例,可以从A->B,B->A。

思路:之前实现单方面的拖拽,是一个拖,一个放。那么这两者彼此都这样设置一番呢,岂不是可以实现互相的拖放?

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>drag</title>
<style type="text/css">
#div1, #div2 {
	float:left; 
	width:200px; 
	height:80px; 
	margin:10px;
	border:1px solid #aaaaaa;
}
</style>
<script>
function allowDrop(ev) {
	ev.preventDefault();
}

function drag(ev) {
	ev.dataTransfer.setData("Text",ev.target.id);
}

function drop(ev) {
	ev.preventDefault();
	var data=ev.dataTransfer.getData("Text");
	ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
	<img src="https://img0.baidu.com/it/u=1047123058,3465364298&fm=253&fmt=auto&app=138&f=JPEG?w=720&h=405" draggable="true" ondragstart="drag(event)" id="drag1" width="200" height="80">
</div>
<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

</body>
</html>

效果

image-20220222180034593

6、一个好用的拖拽插件

既然是学习拖拽的,那么推荐一个比较好用的Vue的拖拽组件,vue.draggable,它的官网地址:Github地址

image-20220222180336664

里面也有其作者写的一个js公用版的。

也把中文文档地址贴一下吧,希望对你学习拖拽有帮助。中文文档地址

7、总结

写那么多,总感觉意犹未尽!

差一个拖拽的小游戏案例?(等待安排,时间紧急,需要排期!!!)

重构前端知识体系,你要一起吗?

博客说明与致谢

文章所涉及的部分资料来自互联网整理,其中包含自己个人的总结和看法,分享的目的在于共建社区和巩固自己。

引用的资料如有侵权,请联系本人删除!

感谢万能的网络,W3C,菜鸟教程等!

感谢勤劳的自己个人博客GitHub学习GitHub

公众号【归子莫】,小程序【子莫说】

如果你感觉对你有帮助的话,不妨给我点赞鼓励一下,好文记得收藏哟!关注我一起成长!

幸好我在,感谢你来!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【HTML】HTML5的拖放你用了吗 的相关文章

  • 非矩形 CSS 图像链接

    我有以下要求 大图像包含多个需要链接到其他页面的 热点 听起来很简单 我创建了一个简单的 html 页面 一个带有背景图像的 div 和使用带有图像精灵翻转的 CSS 的绝对定位链接 然而 现在我看到了另一张图像 热点不是方形的 而是不规则
  • CSS 中的重叠文本 - 如何更改它?

    我正在尝试更改 css 文件中的重叠元素 文本 一行文本 在常规浏览器中 在移动设备中显示为两行文本 重叠在一起 此更改适用于网站的移动版本 横向平板电脑的 media 部分 目前 标题 h2 文本在 iPad 平板电脑上重叠 来自 h2
  • 如何在CSS中捏住一行的中间

    我正在尝试制作一条看起来几乎在末端有衬线的线条 本质上 我想让它在最末端变宽 在中间变细 只需使用 css 这实际上被证明是一个相当大的挑战 任何帮助 将不胜感激 到目前为止 我已经能够了解我想要如何使用 after伪选择器 但顶部没有运气
  • 在 iOS 中禁用文本选择标注

    我知道当用户长按某个按钮时您可以禁用标注link使用这个 body webkit touch callout none important a webkit user select none important 但是文本选择菜单呢 我的用例
  • 将 localStorage 数据设置为只读

    我正在开发 AngularJs 应用程序 我将数据存储在 localStorage 中 localStorageService set selectedUserCategory Circle 现在当我看到浏览器的 localStorage
  • 如何在 css 中对重新定位的 div 进行 z 索引

    Context 我正在尝试制作明显集中的菜单项 当鼠标悬停时改变颜色并扩大尺寸 虽然设置另一种颜色很容易 但尝试将其横向移动是一项比我想象的更复杂的任务 运动本身按其应有的方式工作 但项目的 z 索引变得混乱 Issue 背景颜色已按其应有
  • CSS 可调整大小的带标题的图像

    我正在尝试获取并排显示的两个图像的 HTML 布局 并填充页面 同时保持其纵横比并保持图像彼此相邻 即不在页面每一半的中心 我还想要顶部有一个标题 我几乎已经使用下面的 CSS hackery 实现了这一目标 目前它看起来像这样 如果我水平
  • iOS Voice Over 和 Android 无法播报 Span 标签中的文本

    我们希望屏幕阅读器在节点关闭后宣布 项目已关闭 有趣的是 Chrome 上的 NVDA 正确地播报了该消息 而 Android 和 iOS Voice Over 则未能播报此消息 这是打字稿代码 HostListener keydown t
  • 从一个组件访问另一个组件的方法

    我在 Angular 中 需要从另一个组件调用一个组件的方法 拥有这个组件 import Component OnInit Input from angular core Component selector app popover tem
  • 如何在 JavaScript 中访问自定义 html 属性?

    您好 我在这个 html 文档中遇到问题 请帮助我 我对此很陌生 也许我很愚蠢 错过了一些东西 我在这里只放了有用的来源来解决请 a Hurray a br 我希望它显示
  • JQuery .submit() 在 IE9 中失败

    下面是一个 Jsfiddle 和最近提出的问题的链接 如果您在 FF 或 Chrome 中进入 jsfiddle 页面并单击 Click Me 您可以选择一个文件 一旦确定该文件 页面将查找 php 脚本 在 IE 中 它不会查找 php
  • 如何将带有动态内容的无序列表居中放置在 div 中?

    我正在尝试找出一种将 div 内的无序列表垂直居中的方法 我找到了很多方法来做到这一点 但是我的 ul 标签中的 li 标签中有 PHP 代码 可以从数据库获取文本 这会导致 li 标签中的文本长度发生变化 显着导致内部垂直筛选我的 div
  • 如何避免 在选择文件后删除值?

    我正在开发一个网络上传器 但是 我发现了一些东西 我不知道这是否是一个问题 这是我发现的 当我选择文件时
  • 使用 javascript/jquery 仅选择特定元素后面的文本

    如下面的代码片段所示 我有多个文本 div 其中有粗体部分 然后是换行符 然后是一段文本 我可以 find 粗体部分 但如何使用 javascript jquery 只获取粗体部分后面换行符后面的文本部分 div class thecont
  • 如何使弹性盒与需要截断文本的嵌套子项一起使用?

    要让 flex child 截断带有省略号的文本 可以给父级一个 min with 0 在我的项目中 子组件嵌套在几乎 10 个不同的弹性容器中 我是否需要给所有父母一个 min width 0 或者有更好的解决方法吗 sandbox ht
  • 在智能手机上选择尺寸为正常尺寸

    在我的网络应用程序中 我创建了一个选择size 5 正确显示 您可以从图像中看到 当我在移动设备上打开应用程序时 我得到的是这个维度 您如何看到尺寸不正确 我通过代码而不是CSS设置尺寸 我再说一遍 这在桌面上有效 但在移动设备上不起作用
  • 从逗号分隔的字符串创建 html 表 javascript

    我正在尝试编写一个 Javascript 函数 该函数将文本写入 最终 创建以下 html 表 我将向它传递不同长度的参数以创建数百个表 table tr td u School u td td u Percent u td tr td S
  • 如何为列表中的项目添加背景颜色

    我有一个有序列表 ol li class odd Lorem ipsum dolor sit amet consectetur li li class even Some more text li ol 看起来像这样 Lorem ipsum
  • jquery ajax - 返回 json 或纯 html 更好

    当时间从ajax返回时 我应该返回 json 编码 并使用 jquery parseJSON 并使用 document createElement 并将数据附加到刚刚创建的元素内 或者最好以 html 文本形式返回 example div
  • 背景过滤器不适用于 Chrome 中的嵌套元素

    我有一个div outer和里面一个div inner 都与position absolute and backdrop filter blur 8px https jsbin com nihakiqocu 1 edit html css

随机推荐

  • 性能测试之Jmeter集合点

    01 计数器 计数器就是按照设置可以为每个用户迭代时进行计数 可以用作参数化 jmeter计数器设置 没勾选与每用户独立跟踪计数时 计数器每用户每迭代都会往上增加数字 到最大时可重新开始 勾选与每用户独立跟踪计数器时 每个线程也就是用户会单
  • 毕业设计-基于机器视觉的数字图像处理技术研究-OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 基于OpenCV数据库的程序环境构建 二 基于OpenCV的图像技术处理 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕
  • CentOS Linux服务器安全设置

    转自 http www osyunwei com archives 754 html 引言 我们必须明白 最小的权限 最少的服务 最大的安全 所以 无论是配置任何服务器 我们都必须把不用的服务关闭 把系统权限设置到最小话 这样才能保证服务器
  • 华为OD机试 - 最佳植树距离(Java)

    题目描述 按照环保公司要求 小明需要在沙化严重的地区进行植树防沙工作 初步目标是种植一条直线的树带 由于有些区域目前不适合种植树木 所以只能在一些可以种植的点来种植树木 在树苗有限的情况下 要达到最佳效果 就要尽量散开种植 不同树苗之间的最
  • Pandas基础知识入门

    Pandas是基于Numpy构建的含有更高级数据结构和工具的数据分析包 类似于Numpy的核心是ndarray pandas 也是围绕着 Series 和 DataFrame两个核心数据结构展开的 Series 和 DataFrame 分别
  • ALLEGRO等长时如何将PIN DELAY和VIA长度计算在内

    在PCB设计中 对于时序要求严格的线路 Via和IC pin delay的长度必须得到重视 通过下面的操作 可将Via和Pin delay加入到线路长度的计算中 1st 计算Pin delay 打开Constraint Manager 选择
  • c语言指针入门

    1 指针是什么 1 概念 指针是一种十分重要的数据类型 利用指针变量可以直接对内存中各种不同数据结构的数据进行 快速处理 2 指针与内存的关系 指针与内存有着密切的联系 为了正确理解指针的概念 必须弄清楚计算机系统中数 据存储和读取的方式
  • OSI与TCP/IP协议

    OSI七层模型 OSI7层模型分别是 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 数据的封装与解封装过程 OSI模型vsTCP IP模型 TCP IP协议族的组成 每层常见的协议 应用层的协议 HTTP协议 HTTPS协议
  • 【ML&DL】【skimming】Global Optimality in Neural Network Training

    补了一下2017年的CVPR Global Optimality in Neural Network Training 1 论文一览 痛点 深度学习取得了很大的成功 但是对其成功原因的数学解释却还是一个难点 很大一个原因是对深度网络的参数学
  • 读《洞穴奇案》——一个人是否应该为了避免偷窃面包而挨饿致死?

    之前在功利主义与法的精神一文中提到过正当防卫 在读了今天的内容后 我觉得有必要对正当防卫的内在精神做一个深入探讨 书中说到判断是否是正当防卫 需要去判断一个人在进行自我防卫的时候是否是故意的 我认为 对这个故意的解读 是判断正当防卫的关键
  • SM2加解密、签名验签

    导论 SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法 在我们国家商用密码体系中被用来替换RSA算法 国产SM2算法 是基于ECC的 但二者在签名验签 加密解密过程中或许有些许区别 目前鄙人还不太清楚 后期有机会的话
  • linux:http服务器搭建及实验案例

    目录 准备工作 http服务器各个配置文件大概说明 实验1 访问不同ip获得不同网页 实验2 同一ip访问不同端口获得不同网页 准备工作 1 安装http服务 2 将 etc selinux config 文件下面的 SELINUX值改为
  • 设备虚拟化基础 - PCI

    目录 1 配置空间概念和作用 2 通过配置空间发现设备 3 Linux读取PCI配置空间接口 4 内核中具体读取配置空间实例 5 Virtion设备自定义空间 6 Linux读取Capabilities List代码解析 1 配置空间概念和
  • 【解决方案】“/usr/bin/nvcc“ is not able to compile a simple test program解决方案

    问题描述 CMake Error at usr share cmake 3 16 Modules CMakeTestCUDACompiler cmake 46 message The CUDA compiler usr bin nvcc i
  • 深入理解Android之AOP

    深入理解Android之AOP 格式更加精美的PDF版请到 http vdisk weibo com s z68f8l0xTgCLK 下载 一 闲谈AOP 大家都知道OOP 即ObjectOriented Programming 面向对象编
  • OpenGL 创建OpenGL上下文(OpenGL Context WGL)

    文章目录 OpenGL Context 窗口 Pixel Format 创建上下文 Create Context MakeCurrent 删除上下文 Delete Context 如何正确创建Context 创建一个假的Context 获取
  • 2023华为OD机试真题【双指针/优雅子数组】

    题目内容 如果一个数组中出现次数最多的元素出现大于等于K次 被称为K 优雅数组 k也可以被称为优雅阈值 例如 数组1 2 3 1 2 3 1 它是一个3 优雅数组 因为元素1出现次数大于等于3次 数组1 2 3 1 2就不是一个3 优雅数组
  • 蓝桥杯 填字母游戏(博弈论)

    小明经常玩 LOL 游戏上瘾 一次他想挑战K大师 不料K大师说 我们先来玩个空格填字母的游戏 要是你不能赢我 就再别玩LOL了 K大师在纸上画了一行n个格子 要小明和他交替往其中填入字母 并且 1 轮到某人填的时候 只能在某个空格中填入L或
  • 寻找3的幂

    目录 题目 题目接口 题目思路 第一点 第二点 第三点 代码实现 普通版本 提交 递归版本 提交 结语 题目 在ledcode刷题网站上 有这样一道题 寻找3的幂 题目接口 bool isPowerOfThree int n 题目思路 第一
  • 【HTML】HTML5的拖放你用了吗

    HTML HTML5的拖放你用了吗 引言 github HTML HTML5的拖放你用了吗 内容速递 看了本文您能了解到的知识 在 HTML5 中 拖放是标准的一部分 任何元素都能够拖放 拖放的操作 多用在拖拽排序列表 游戏拼图等 下文中出