HTML5 拖放(Drag and Drop)学习笔记

news/2025/3/29 1:12:53/

一、HTML5 拖放简介

HTML5 拖放(Drag and Drop)是HTML5标准的一部分,允许用户抓取一个对象并将其拖动到另一个位置。拖放功能在现代网页中非常常见,例如文件上传、任务管理、布局调整等场景。

HTML5 拖放功能支持以下浏览器:

  • Internet Explorer 9+

  • Firefox

  • Opera

  • Chrome

  • Safari(注意:Safari 5.1.2不支持拖放功能)

二、HTML5 拖放的基本实现

1. 设置元素为可拖放

要使一个元素可拖动,需要将draggable属性设置为true。例如:

HTML复制

<img id="drag1" src="logo.png" draggable="true" ondragstart="drag(event)">

预览

2. 拖动什么:ondragstart 和 setData()

当元素被拖动时,会触发ondragstart事件。在这个事件中,可以使用dataTransfer.setData()方法设置拖动数据的类型和值。例如:

JavaScript复制

function drag(ev) {ev.dataTransfer.setData("text", ev.target.id);
}
  • ev.dataTransfer.setData():设置拖动数据的类型和值。

  • "text":表示拖动数据的类型,这里使用"text"表示文本类型。

  • ev.target.id:表示被拖动元素的id

3. 放到何处:ondragover

ondragover事件用于指定允许放置拖动数据的位置。默认情况下,元素是不允许放置拖动数据的。要允许放置,必须调用event.preventDefault()方法。例如:

JavaScript复制

function allowDrop(ev) {ev.preventDefault();
}

4. 进行放置:ondrop

当拖动的数据被放置到目标元素时,会触发ondrop事件。在这个事件中,可以使用dataTransfer.getData()方法获取拖动的数据。例如:

JavaScript复制

function drop(ev) {ev.preventDefault();var data = ev.dataTransfer.getData("text");ev.target.appendChild(document.getElementById(data));
}
  • ev.preventDefault():避免浏览器对数据的默认处理(例如以链接形式打开)。

  • ev.dataTransfer.getData("text"):获取拖动数据,返回在setData()方法中设置的值。

  • ev.target.appendChild():将被拖动的元素追加到目标元素中。

三、HTML5 拖放的完整示例

以下是一个完整的HTML5拖放示例,展示了如何将一个图片拖动到一个矩形框中:

HTML复制

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>HTML5 拖放示例</title><style>#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 id="drag1" src="logo.png" draggable="true" ondragstart="drag(event)" width="336" height="69">
</body>
</html>

预览

示例说明:

  1. <img>元素:设置draggable="true",使其可拖动,并绑定ondragstart事件。

  2. <div>元素:绑定ondropondragover事件,用于处理拖放逻辑。

  3. JavaScript函数

    • drag():设置拖动数据。

    • allowDrop():允许放置。

    • drop():处理放置逻辑。

四、更多实例

1. 在两个<div>元素之间拖放图像

以下是一个更复杂的示例,展示了如何在两个<div>元素之间拖放图像:

HTML复制

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>HTML5 拖放 - 两个 div 之间</title><style>.box {width: 150px;height: 150px;border: 1px solid #aaaaaa;margin: 10px;padding: 10px;}</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>在两个矩形框之间拖动图片:</p><div class="box" id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"><img id="drag1" src="logo.png" draggable="true" ondragstart="drag(event)" width="100" height="100"></div><div class="box" id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
</body>
</html>

预览

示例说明:

  1. 两个<div>元素:分别作为源容器和目标容器。

  2. 拖动逻辑:与前面的示例类似,但增加了两个容器之间的交互。


http://www.ppmy.cn/news/1583275.html

相关文章

责任链模式-java

1、spring依赖注入模式 @Configuration public class ChainConfig {@Beanpublic ChainSpringFactory chainSpringFactory(List<IHandler<DemoOne,Boolean>> handlerList){return new ChainSpringFactory(handlerList);}} public class DemoOne { }public abstract…

Node.js 包与 npm 详解:使用 npm 的重要注意事项与最佳实践

目录 Node.js 包与 npm&#xff1a;使用 npm 的其它注意点详解 1. package.json 与 package-lock.json 的作用 什么是 package.json&#xff1f; 什么是 package-lock.json&#xff1f; 示例&#xff1a;package-lock.json 片段 2. 语义化版本&#xff08;SemVer&#xf…

从零到一开发一款 DeepSeek 聊天机器人

AI聊天机器人 目标设计方案系统架构技术选型功能模块 实现代码环境配置安装依赖 核心代码API 请求函数主循环函数 功能扩展1. 情感分析2. 多语言支持3. 上下文记忆4. 用户身份识别 总结附录 目标 开发一个智能聊天机器人&#xff0c;旨在为用户提供自然、流畅的对话体验。通过…

Dubbo(9)什么是RPC?Dubbo如何实现RPC?

什么是RPC&#xff1f; RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络细节的通信方式。RPC使得程序可以像调用本地方法一样调用远程服务&#xff0c;隐藏了网络通信的…

深入理解 HTML5 Web Workers:提升网页性能的关键技术解析

深入理解 HTML5 Web Workers&#xff1a;提升网页性能的关键技术解析 引言1. 什么是 Web Workers&#xff1f;Web Workers 的特点&#xff1a; 2. Web Workers 的使用方式2.1 创建一个 Web Worker步骤 1&#xff1a;创建 Worker 文件步骤 2&#xff1a;在主线程中调用 Worker 3…

深入理解JavaScript中的同步和异步编程模型及应用场景

前言 随着互联网的发展&#xff0c;JavaScript作为前端开发的主要语言&#xff0c;也不断地发展和完善。在JavaScript中&#xff0c;同步代码和异步代码是两个非常重要的概念&#xff0c;也是开发过程中需要了解的基础知识。本文将对JavaScript中的同步代码和异步代码进行详细…

Elasticsearch 倒排索引 和 正排索引

一、倒排索引 倒排索引是 Elasticsearch 实现高效全文搜索的核心技术。它通过将词项与文档 ID 关联&#xff0c;支持快速检索、短语查询、布尔查询和相关性评分。尽管倒排索引在存储和更新方面有一定的开销&#xff0c;但通过词典优化、倒排列表压缩、分片和缓存等技术&#x…

Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南

实验环境 Ubuntu22.04操作系统 registry节点 10.0.0.91 master节点 10.0.0.92 backup节点 10.0.0.93 在企业信息化建设的不同演进阶段&#xff0c;私有镜像仓库的选型策略存在显著差异。近期主导完成某企业级容器镜像仓库升级项目&#xff0c;成功实现Docker Registry至Ha…