HTML5拖放(Drag和drop)教程

拖放

一、概述

1、拖放(Drag和drop)是HTML5标准的组成部分。
   拖放是一种常见的特性,即将一个对象抓取后放置到指定位置,在HTML5中,任何元素都可以进行拖放的操作。
2、浏览器支持情况。
   Internet Explorer 9、Firefox、Opera 12、Chrome以及Safari 5支持拖放,需要注意的是,在Safari 5.1.2中不支持拖放,由此可见,在编写拖放时,需要注意浏览器的兼容问题。
3、拖拽元素支持的事件
   (1)ondrag-----应用于拖拽元素,整个拖拽过程都会使用;
   (2)ondragstart------应用于拖拽元素,当拖拽开始时调用;
   (3)ondragleave-----应用于拖拽元素,当鼠标离开拖拽元素时调用;
   (4)ondragend-----应用于拖拽元素,当拖拽事件结束时调用。
4、目标元素支持的事件
   (1)ondragenter-----应用于目标元素,当拖拽元素进入时调用;
   (2)ondragover-----应用于目标元素,当停留在目标元素上时调用;
   (3)ondrop-----应用于目标元素,当在目标元素上松开鼠标时调用;
   (4)ondragleave-----应用于目标元素,当鼠标离开目标元素时调用。

二、拖放的步骤

step1:设置元素为可拖放:
   使用draggable属性;


<img id="image" src="../../img/周震南.jpg" draggable="true"  />

step2:拖动什么
   使用ondragstart和setData()。ondragstart
属性调用了一个函数drag(event),它规定了被拖动的数据;dataTransfer.setData()方法设置了被拖动数据的数据类型和值。

// 设置允许在浏览器中将元素放在另一个元素中
			function drag(ev){
				console.log(ev)
				/*通过dataTransfer来实现数据的存储和获取
					setData(format,data)
					format:数据的类型: text/html  text/uri-list,
					data:数据:一般来说是字符串值,
				*/
				ev.dataTransfer.setData("text",ev.target.id);
			}

step3:放到何处 -------ondragover
   ondragove规定在何处放置被拖动的数据,浏览器默认无法将元素放置到其他元素中,若要允许放置,要通过调用ondragover事件的ev.preventDefault();方法,用以阻止浏览器的默认行为。

function allowDrop(ev){
	// 阻止浏览器默认行为
	ev.preventDefault();
}

step5:进行放置-------ondrop
   当放置被拖动数据的时候,会发生drop事件,ondrop属性会调用drop(event)函数。

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

注意:
   在编写step3时,用来容纳被拖动元素的元素也要加上ondragover属性

div id="box" ondrop="drop(event)" ondragover="allowDrop(event)">
	<!-- allowDrop(event),设置允许在这个元素中放置其他元素 -->
</div>

三、完整代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>拖放</title>
		<style type="text/css">
			#box{
				width: 300px;
				height: 200px;
				border: 1px solid #b8b8b8;
			}
		</style>
	</head>
	<body>
		<div class="drag">
			拖动图片到下面矩形框中:
			<div id="box" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
			<br>
			 <!-- draggable="true" :  使元素可以被拖动 -->
			<!-- ondragstart="drag(event)" :  表示拖动的是这里的数据 -->
			<img id="image" src="../../img/周震南.jpg" draggable="true" ondragstart="drag(event)" />
		</div>
		<script type="text/javascript">
			function allowDrop(ev){
				ev.preventDefault();
			}
			function drag(ev){
				console.log(ev)
				ev.dataTransfer.setData("text",ev.target.id);
			}
			function drop(ev){
				ev.preventDefault();
				var data=ev.dataTransfer.getData("text");;
				console.log(data)
				ev.target.appendChild(document.getElementById(data));
			}
		</script>
	</body>
</html>

四、运行结果

拖放前:
HTML5拖放(Drag和drop)教程_第1张图片
拖放后:
HTML5拖放(Drag和drop)教程_第2张图片

你可能感兴趣的:(javascript,html5)