HTML5 拖放(Drag 和 Drop)简介

admin9个月前笔记84
拖放

拖放是一种常见的特性,即抓取对象以后拖到另一个位置。

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

HTML5 拖放实例

下面的例子是一个简单的拖放实例:

实例

<!DOCTYPE HTML><html><head><meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title><style type="text/css">#div1 {width:350px;height:70px;padding: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>
 <p>拖动 RUNOOB.COM 图片到矩形框中:</p>
 <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div><br><img loading="lazy" id="drag1" src="/images/logo.png" draggable="true" ondragstart="drag(event)" width="336" height="69">
 </body></html>

它看上去也许有些复杂,不过我们可以分别研究拖放事件的不同部分。

设置元素为可拖放

首先,为了使元素可拖动,把 draggable 属性设置为 true :

<img draggable="true">
拖动什么 - ondragstart 和 setData()

然后,规定当元素被拖动时,会发生什么。

在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。

dataTransfer.setData() 方法设置被拖数据的数据类型和值:

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

Text 是一个 DOMString 表示要添加到 drag object 的拖动数据的类型。值是可拖动元素的 id ("drag1")。

放到何处 - ondragover

ondragover 事件规定在何处放置被拖动的数据。

默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

这要通过调用 ondragover 事件的 event.preventDefault() 方法:

event.preventDefault()
进行放置 - ondrop

当放置被拖数据时,会发生 drop 事件。

在上面的例子中,ondrop 属性调用了一个函数,drop(event):

function drop(ev)
{
    ev.preventDefault();
    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}

代码解释:

  1. 调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)

  2. 通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。

  3. 被拖数据是被拖元素的 id ("drag1")

  4. 把被拖元素追加到放置元素(目标元素)中


相关文章

Web 3.0很重要?你需要了解哪些基础知识

Web 3.0很重要?你需要了解哪些基础知识

什么是Web 3.0?它与Web 2.0和1.0相比有什么差异?Matteo Gianpietro Zago有自己的看法。他是The Internet of Blockchain Foundation...

 区分MBR和GPT分区表

区分MBR和GPT分区表

MBR和GPT分区表详解全新硬盘(未初始化)装系统之前,必须对齐进行分区,硬盘分区初始化的格式包括MBR和GPT两种。当然苹果的MAC还有另一种分区格式,因为不关注那一方面所以这里不介绍了MBR分区表...

用一个实例讲解rename命令中正则表达式的使用

rename命令用字符串替换的方式批量改变文件名。今天以一个例子来具体写一下自己遇到的问题并且解决的例子。希望对大家有帮助。格式如下:rename 原字符串  目标字符串  文件(...

如何用 scp 在本地和远程主机之间复制文件

如何用 scp 在本地和远程主机之间复制文件

基本格式scp source target将本地文件复制到远端服务器上[student@servera ~]scp log.tar root@serv...

教你如何找到正在运行中的进程 ID 并杀死它

教你如何找到正在运行中的进程 ID 并杀死它

你的 Linux 系统中运行的应用可能会让你的电脑变慢,特别是你的电脑配置较低的时候。在 Linux (以及所有其他 OS)中,程序或者应用都携带一个特别的 PID (进程 ID)可供你简单地分辨它们...

Oracle参数之set与reset设置

Oracle参数之set与reset设置

Oracle参数设置之set与reset的实际案例环境:Oracle 10.2.0.5 RAC需求:节点1的aq_tm_processes要求恢复默认,节点2设置要求保持不变1.构建测试环境2.测试方...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。