H5之drag函数和draggable的使用

drag函数和draggable的使用

在这里插入代码片
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>drag函数和draggable的使用</title>
	<style>
		div.dropTarget{
			width: 200px;
			height: 200px;
			margin-left: 200px;
			/* display: inline-block; */ 
			/* div文字对齐的方式  */
			float: left;
			border: 1px solid black;
		}
		p.demo::before{
			content: "";
			display: block;
			clear: both;
		}
		/* 也可以在浮动元素的下一个元素前面里面设置一个before伪元素来清除浮动流 */
	</style>
</head>
<body>
	<div class="dropTarget">
		<p id="dragTarget" draggable="true">请拖动我</p>
	</div>
	<div class="dropTarget"></div>
	<p class="demo"></p>
	<p>看看是否清除了浮动流</p>
	<script>
		var p1=document.getElementsByClassName('demo')[0];
		var drag=document.getElementById('dragTarget');
		var divtest=document.getElementsByClassName('dropTarget');
		drag.addEventListener('dragstart',function(e){
			e.dataTransfer.setData("Id",e.target.id);
			e.target.style.opacity=0.4;
			p1.innerHTML="p正在被拖动";
		});
		drag.addEventListener('drag',function(e){
			p1.style.color="red";
			console.log('这要被拖住就一直会执行');
		});
		// 当拖完p元素输出一些文本元素和重置透明度
		drag.addEventListener('dragend',function(e){
			console.log('dragend事件比drop事件还要晚执行');
			e.target.style.opacity=1;
			p1.innerHTML="p被拖动完成了了了了了了了了了";
			p1.style.color="";
		});
		document.addEventListener('dragenter',function(e){
			if(e.target.className=='dropTarget'){
				console.log('我进来了')
				e.target.style.border="3px dotted red";
			}
		});// 默认情况下,数据/元素不能在其他元素中被拖放。对于drop我们必须防止元素的默认处理
		document.addEventListener('dragover',function(e){
				e.preventDefault();
		});// 当可拖放的p元素离开droptarget,重置div的边框样式
		document.addEventListener('dragleave',function(e){
			if(e.target.className=='dropTarget'){
				console.log('我离开了');
				e.target.style.border="";
			}
		});
		/*对于drop,防止浏览器的默认处理数据(在drop中链接是默认打开)
		复位输出文本的颜色和DIV的边框颜色
		利用dataTransfer.getData()方法获得拖放数据
		拖拖的数据元素id("dragTarget")
		拖拽元素附加到drop元素*/
		document.addEventListener('drop',function(e){
			e.preventDefault();
			if(e.target.className=='dropTarget'){
				console.log('这里是drop');
				var id1=e.dataTransfer.getData('Id');
				var temp=document.getElementById(id1);
				e.target.appendChild(temp);
				e.target.style.border="";
			}
		});
	</script>
</body>
</html>

另外,关于拖放drag中的其它一些坑:
1.调用drop之前一定要先调用dragover,不管你想不想用,并且在处理函数的第一行加上:event.preventDefault();表示允许放下元素
2.只能在dragstart调用函数里执行setData;在drop调用函数了执行getData;这是由操作权限所决定的。
原文:https://blog.csdn.net/monkeydie/article/details/78118699

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值