HTML5 元素拖放

news2025/1/18 13:56:43

文章目录

  • HTML5 元素拖放
    • 概述
    • 触发事件
      • 实现元素拖放功能
    • dataTransfer
      • 元素拖动效果
      • 垃圾箱效果

HTML5 元素拖放

概述

在HTML5中,我们只需要给元素添加一个draggable属性,然后设置该属性值为true,就能实现元素的拖放。

拖放,指的是“拖曳”和“释放”。在页面中进行一次拖放操作,我们必须先弄清楚两个元素:“源元素”和“目标元素”。“源元素”指的是被拖曳的那个元素,“目标元素”指的是源元素最终被释放到的那个元素。

触发事件

源元素触发的事件

事件说明
ondragstart开始拖放
ondrag拖放过程中
ondragend结束拖放

目标元素触发的事件

事件说明
ondragenter当被拖放的元素进入本元素时
ondragover当被拖放的元素正在本元素范围内移动时
ondragleave当贝拖放的元素离开本元素时
ondrop当源元素释放到本元素时

实现元素拖放功能

说明

e.offsetX、e.offsetY分别表示鼠标相对于触发事件的对象的X坐标、Y坐标。

e.pageX、e.pageY分别表示鼠标相对于当前窗口的X坐标、Y坐标。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style>
			* {
				margin: 0;
				padding: 0;
			}

			body {
				position: relative;
			}

			#img {
				position: absolute;
			}
		</style>
		<script>
			window.onload = function() {
				var img = document.getElementById("img");
				var offsetX, offsetY;
				//拖动开始时,记录鼠标在图片上的偏移值
				img.ondragstart = function(e) {
					offsetX = e.offsetX;
					offsetY = e.offsetY;
				}
				//拖动时,获取鼠标在页面的坐标值
				img.ondrag = function(e) {
					if (e.pageX == 0 && e.pageY == 0) {
						return;
					}
					img.style.left = (e.pageX - offsetX) + "px";
					img.style.top = (e.pageY - offsetY) + "px";
				}
			}
		</script>
	</head>
	<body>
		<img id="img" src="img/apple_pic.png" draggable="true">
	</body>
</html>

dataTransfer

在HTML5中,如果想要在元素拖放中实现数据传递,我们需要使用dataTransfer对象。dataTransfer对象主要用于在“源元素”与“目标元素”之间传递数据。

dataTransfer对象有两个最重要的方法:setData()和getData()。在整个拖曳过程中,具体操作是这样的:开始拖放源元素时(ondragstart事件),调用setData()方法保存数据;然后在放入目标元素时(ondrop事件),调用getData()方法读取数据。

setData()方法

可以使用setData()方法。

setData(format, data);

format格式

数据格式说明
text/plain文本文字格式
text/htmlHTML格式
text/xmlXML字符格式
text/url-listURL列表格式

get()方法

可以使用getData()方法读取数据。

getData(format);

元素拖动效果

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			ul {
				width: 120px;
				height: 120px;
				border: 1px solid silver;
			}
		</style>
		<script>
			window.onload = function() {
				var box1 = document.getElementById("box1");
				var oLis = box1.getElementsByTagName("li");
				var box2 = document.getElementById("box2");
				//为每个li(源元素)添加ondragstart事件
				for (var i = 0; i < oLis.length; i++) {
					oLis[i].ondragstart = function(e) {
						e.dataTransfer.setData("text/plain", e.target.id);
					}
				}
				//屏蔽元素的默认行为
				box2.ondragover = function(e) {
					e.preventDefault();
				}
				//为目标元素添加ondrop事件
				box2.ondrop = function(e) {
					e.preventDefault();
					var id = e.dataTransfer.getData("text/plain");
					var obj = document.getElementById(id);
					box2.appendChild(obj);
				}
			}
		</script>
	</head>
	<body>
		<ul id="box1">
			<li draggable="true" id="li1">HTML</li>
			<li draggable="true" id="li2">CSS</li>
			<li draggable="true" id="li3">JavaScript</li>
			<li draggable="true" id="li4">jQuery</li>
			<li draggable="true" id="li5">Vue</li>
		</ul>
		<ul id="box2"> </ul>
	</body>
</html>

在这里插入图片描述

垃圾箱效果

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			#garbageBox {
				display: inline-block;
				width: 100px;
				height: 100px;
				background-color: red;
			}

			#garbage {
				display: inline-block;
				width: 50px;
				height: 50px;
				background-color: hotpink;
			}
		</style>
		<script>
			window.onload = function() {
				var garbageBox = document.getElementById("garbageBox");
				var garbage = document.getElementById("garbage");
				garbageBox.ondragover = function(e) {
					e.preventDefault();
				}
				garbageBox.ondrop = function(e) {
					e.preventDefault();
					garbage.parentNode.removeChild(garbage);
				}
			}
		</script>
	</head>
	<body>
		<div id="garbageBox"></div>
		<div id="garbage" draggable="true"></div>
	</body>
</html>

在这里插入图片描述

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

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

相关文章

【Python】Numpy分布函数总结

文章目录总表均匀分布和三角分布幂分布与正态分布相关的分布与Gamma相关的分布极值分布总表 np.random中提供了一系列的分布函数&#xff0c;用以生成符合某种分布的随机数。下表中&#xff0c;如未作特殊说明&#xff0c;均有一个size参数&#xff0c;用以描述生成数组的尺寸…

【综合笔试题】难度 1.5/5,常规二叉树爆搜题

题目描述 这是 LeetCode 上的 95. 不同的二叉搜索树 II &#xff0c;难度为 中等。 Tag : 「树」、「二叉搜索树」、「BST」、「DFS」、「递归」、「爆搜」 给你一个整数 n&#xff0c;请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以…

2022出圈的ML研究:爆火的Stable Diffusion、通才智能体Gato,LeCun转推

这些机器学习领域的研究你都读过吗&#xff1f; 2022 年即将步入尾声。在这一年里&#xff0c;机器学习领域涌现出了大量有价值的论文&#xff0c;对机器学习社区产生了深远的影响。 今日&#xff0c;ML & NLP 研究者、Meta AI 技术产品营销经理、DAIR.AI 创始人 Elvis S.…

CSRF漏洞渗透与攻防(一)

目录 前言 什么是CSRF漏洞 CSRF实现流程 CSRF漏洞危害 XSS漏洞危害 CSRF与XSS区别 CSRF分类 GET型&#xff1a; POST型&#xff1a; CSRF漏洞案列模拟 CSRF常用Payload&#xff1a; CSRF漏洞挖掘 检测工具 CSRF漏洞防御 防御思路 我们该如何去防御CSRF漏洞…

LeetCode动态规划—打家劫舍从平板板到转圈圈(198、213)

打家劫舍平板板打家劫舍转圈圈打家劫舍&#xff08;进阶版&#xff09;平板板打家劫舍 转化子问题&#xff1a; 按顺序偷n间房子&#xff0c;就是考虑偷前n-1间房子还是偷前n-2间房子再偷第n间房子。 列出公式&#xff1a; res[n] max{ res[n-1] , 数组中最后一个数据res[n-…

企业信息化之源代码防泄密场景分析

场景描述 随着企业信息化发展迅速&#xff0c;越来越多的无形资产面临着被泄露&#xff0c;被盗取的&#xff0c;或员工无意导致的数据泄密风险。尤其是有源码开发的企业&#xff0c;源代码的安全更是重中之重&#xff0c;一旦泄密&#xff0c;有可能给企业带来不可估量的损失…

全程数字化的企业电子招标采购管理系统源码

全程数字化的采购管理 智能化平台化电子化内外协同 明理满足采购业务全程数字化&#xff0c; 实现供应商管理、采购需求、全网寻源、全网比价、电子招 投标、合同订单执行的全过程管理。 传统采购模式面临的挑战 如何以最合适的价格,找到最优的供应商,购买到最好的产品和服务?…

程序员必备网站,建议收藏!

俗话说的好&#xff0c;一个程序员&#xff0c;20%靠知识储备&#xff0c;80%靠网络搜索。 打开代码&#xff0c;打开Google&#xff0c;开始工作。 那么常用的写码软件&#xff0c;你知道几个呢&#xff1f; 下面我们来一起看一下常用的写码软件吧~ 建议收藏本文&#xff…

【算法】面试题 - 链表

链表相关面试题141. 环形链表问题&#xff1a;快慢指针为什么一定会相遇142. 环形链表 II问题&#xff1a;如何确认入口160. 相交链表237. 删除链表中的节点19. 删除链表的倒数第 N 个结点21. 合并两个有序链表23. 合并K个升序链表&#xff08;两种解法&#xff09;扩展&#x…

国产手机扬眉吐气,终于打击了苹果的嚣张气焰

苹果在9月份、10月份都取得了快速增长&#xff0c;而国产手机品牌持续下滑&#xff0c;但是11月份终于让国产手机捡回了主动权&#xff0c;11月份的数据显示有国产手机品牌的出货量大幅增长&#xff0c;而苹果的出货量却大幅下滑&#xff0c;国产手机成功反击了苹果。分析机构给…

Vue + SpreadJS 实现高性能数据展示与分析

Vue SpreadJS 实现高性能数据展示与分析 在前端开发领域&#xff0c;表格一直都是一个高频使用的组件&#xff0c;尤其是在中后台和数据分析场景下。但当一屏展示数据超过1000条数据记录时&#xff0c;会出现浏览器卡顿等问题&#xff0c;严重影响客户体验。为解决这些性能问…

Seay代码审计系统审计实战

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是Seay代码审计系统审计实战。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

【算法题解】5. 删除有序数组中的重复项 + 移动零

文章目录删除有序数组中的重复项题目解题思路代码实现复杂度分析移动零题目解题思路代码实现复杂度分析删除有序数组中的重复项 题目 给你一个 升序排列 的数组 nums &#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素只出现一次 &#xff0c;返回删除后数组的新…

Python 并发编程实战,用多线程、多进程、多协程加速程序运行

Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行 文章目录Python 并发编程实战&#xff0c;用多线程、多进程、多协程加速程序运行1、什么是CPU密集型计算、IO密集型计算&#xff1f;2、多线程、多进程、多协程的对比3、怎么根据任务选择对应技术&#x…

达梦数据成功过会!信创浪潮中如何成就一家国产龙头?

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业2022年12月22日&#xff0c;上海证券交易所科创板上市委员会发布《2022年第110次审议会议结果公告》&#xff0c;武汉达梦数据股份有限公司&#xff08;首发&#xff09;符合发行条件、上市条件和信息披露要求。该公告标志着…

5.4 迭代语句

文章目录while语句使用while循环传统for语句传统for循环的执行过程for语句头中的多重定义省略for语句头的某些部分范围for语句do while语句迭代语句通常称为循环,它重复执行操作直到满足某个条件才停下来。while和for语句在执行循环体之前检查条件&#xff0c;do while 语句先执…

MATLAB算法实战应用案例精讲-【连接分析】PageRank(补充篇)(附Python代码实现)

前言 PageRank算法在1998年4月举行的第七届国际万维网大会上由Sergey Brin和Larry Page提出。PageRank是通过计算页面链接的数量和质量来确定网站重要性的粗略估计。算法创立之初的目的是应用在Google的搜索引擎中,对网站进行排名。 随着国内外学者的深入研究,PageRank算法…

burpsuite靶场——SSRF

文章目录针对本地服务器的基本 SSRF针对另一个后端系统的基本 SSRFSSRF 与基于黑名单的输入过滤器基于白名单的输入过滤器的 SSRFSSRF 通过开放重定向漏洞绕过过滤器带外检测的盲 SSRF利用 Shellshock 的盲 SSRF针对本地服务器的基本 SSRF 在商品下查看货物库存情况时抓包 有st…

操作系统实验2:fork()系统调用

操作系统实验2:fork()系统调用 文章目录操作系统实验2:fork()系统调用Task1: fork的基本使用代码运行结果解释Task2: 深入理解fork创建的子进程与父进程的关系代码实验结果现象解释遇到的问题1.乌龙事件 vscode2.the troubles encountered in task1如何跑.sh文件编译链接遇到的…

SegeX Progress:MFC通用进度条

----哆啦刘小洋 原创&#xff0c;转载需说明出处 MFC高级通用进度条-目录1 简介2 进度条实现基本原理3 使用方法3 .1 简单情况3.2 两个前后独立的进度条3.3 实际应用的一般情况3.4 带子进度条4 其他4.1 使用限制4.2 其他全局宏&#xff08;函数&#xff09;4.3 当前进度条设置1…