pc端通过拖放实现添加、删除功能

话不多说上完整代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<link href="favicon.ico" mce_href="favicon.ico" rel="shortcut icon bookmark" type="image/x-icon" />
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<title>通过拖放实现添加、删除 </title>
		<style type="text/css">
			.container{
				padding: 10px;
				box-sizing: border-box;
			}
			.container .mainclassify {
				color: #333333;
			}
			.container .mainclassify .title{
				line-height: 44px;
			}
			.container .mainclassify .title span{
				color: #CCCCCC;
				margin-left: 10px;
			}
			.container .mainclassify .listgroup-item {
			    background-color: none;
			    border: none;
			    overflow: hidden;
			}
			.container .mainclassify .listgroup-item li{
			    float: left;
			    width: 25%;
			    height: auto;
			}
			.container .mainclassify .listgroup-item .item_list{
			    /*background-color:;*/
			    width: 90%;
			    height: 70px;
			    margin: 5px auto;
			    padding: 5px;
			    box-sizing: border-box;
			    font-size: 12px;
			    color: #333;
			    border-radius: 5px;
			    background: #fff;
			}
		</style>
	</head>

	<body>
		<main class="container">
			<div class="mainclassify">
				<p class="fz14 title">我的分类</p>
				<ul class="listgroup-item">
					<li draggable="true" ondragstart="dsHandler(event)"><div class="item_list">推荐1</div></li>
					<li draggable="true" ondragstart="dsHandler(event)"><div class="item_list">推荐2</div></li>
					<li draggable="true" ondragstart="dsHandler(event)"><div class="item_list">推荐3</div></li>
					<li draggable="true" ondragstart="dsHandler(event)"><div class="item_list">推荐4</div></li>
					<li draggable="true" ondragstart="dsHandler(event)"><div class="item_list">推荐5</div></li>
					<li draggable="true" ondragstart="dsHandler(event)"><div class="item_list">推荐6</div></li>
					<li draggable="true" ondragstart="dsHandler(event)"><div class="item_list">推荐7</div></li>
					<li draggable="true" ondragstart="dsHandler(event)"><div class="item_list">推荐8</div></li>
				</ul>
				<div style="border: 1px solid;width: 100%;height: 100px;" id="dest">
					<p ondragleave="return false">书藏家</p>
				</div>
				<img src="../images/garbagebin.png" id="gb" draggable="false"/>
			</div>
		</main>

		
		<script type="text/javascript">
			var dest = document.getElementById("dest");
			//拖动的时间监听
			var dsHandler = function(evt){
				//将被拖动的元素的innerHTML属性设置成被拖动的数据
				evt.dataTransfer.setData("text/plain","<item>"+evt.target.innerHTML);
			};
			dest.ondrop = function(evt){
				evt.preventDefault();
				var text = evt.dataTransfer.getData('text/plain');
				// 如果该text以<item>开头
				if (text.indexOf("<item>") == 0)
				{
					// 创建一个新的div元素
					var newEle = document.createElement("div");
					// 以当前时间为该元素生成一个唯一的ID
					newEle.id = new Date().getUTCMilliseconds();
					// 该元素内容为“拖”过来的数据
					newEle.innerHTML = text.substring(6);
					// 设置该元素允许拖动
					newEle.draggable="true";
					// 为该元素的开始拖动事件指定监听器
					newEle.ondragstart = function(evt)
					{
						// 将被拖动元素的id属性值设置成被拖动的数据
						evt.dataTransfer.setData("text/plain"
							, "<remove>" + newEle.id);
					}
					dest.appendChild(newEle);
				}
			};
			// 当把被拖动元素“放”到垃圾桶上时激发该方法。
			document.getElementById("gb").ondrop = function(evt)
			{
				var id = evt.dataTransfer.getData("text/plain");
				// 如果id以<remove>开头
				if (id.indexOf("<remove>") == 0)
				{
					// 根据“拖”过来的数据,获取被拖动的元素
					var target = document.getElementById(id.substring(8));
					// 删除被拖动的元素
					dest.removeChild(target);
				}
			}
			document.ondragover = function(evt)
			{
				// 取消事件的默认行为
				return false;
			}
			document.ondrop = function(evt)
			{
				// 取消事件的默认行为
				return false;
			}
	
		</script>
	</body>

</html>

其实,拖放删除和添加这个功能最关键的地方就是“携带数据”。正是因为利用了DataTransfer对象来携带数据,才可以像刚才那样添加和删除。

下面是携带数据的基本思路:

“拖”开始的时候(‘拖’通过ondragstart事件监听器来实现,上面的代码有详细注释哟),程序把需要携带的数据放入DataTransfer对象中。
“放”下元素的时候(通过ondrop事件监听器来实现),程序从DataTransfer对象中取出数据,并利用该数据进行相应的处理。上边的程序就为两种拖放数据分别添加了<item>、<remove>,分别代表需要添加收藏夹的数据和需要删除的数据。 
好啦,以上就是通过拖动元素来添加和删除的功能实现。由此可见,通过DataTransfer对象,我们可以让拖放操作实现更丰富的功能。毕竟,DataTransfer对象的属性和方法那么多,想怎么搭配都可以~

好啦,如果大家有什么疑问,或者发现文章中有什么错误,欢迎大家留言评论呀,我们一起学习咯~

完整代码:https://download.csdn.net/download/qq_42396791/10738911 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WebCsDn_TDCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值