HTML5通过api实现拖放效果 dataTransfer对象

dataTransfer对象

说明:dataTransfer对象用于从被拖动元素向放置目标传递字符串数据。因为这个对象是 event 的属性,所以在拖放事件的事件处理程序外部无法访问 dataTransfer。在事件处理程序内部,可以使用这个对象的属性和方法实现拖放功能。

作用 - 提供了剪贴板功能

获取 - 通过事件对象event

方法 - setData(type,data)方法 ,向剪贴板设置(添加)数据

type - 默认为string类型,充当数据标示(ID)

data - 设置的数据, 一定是在源元素事件中使用

方法 - getData(type)方法,从剪贴板中获取数据,在目标元素事件中使用

方法 - clearData(type)方法, -将剪贴板中的数据清除

事件 - dragover和dragleave事件(必须) 两个事件组合实现拖拽效果。

代码示例如下:

复制代码
window.onload=function(){

		var ele1=document.querySelector("#myimg");
		var d1=document.querySelector("#d1");
		var d2=document.querySelector("#d2");

		ele1.addEventListener("dragstart",function(){
			// 获取到源元素使用的数据 - src属性
			var mysrc=ele1.src;
			// 将数据设置到dataTransfer对象中
			event.dataTransfer.setData("text",mysrc);
		});
		
		d2.addEventListener("drop",function(){
			event.preventDefault();	// a. 阻止页面的默认行为
			var mysrc=event.dataTransfer.getData("text");// b. 从dataTransfer对象得到数据
			var img=document.createElement("img");// c. 创建<img>元素,设置一些属性
			img.src=mysrc;
			img.width="256";
			d2.appendChild(img);// d. 将<img>元素添加到id为d2的div元素中
			event.dataTransfer.clearData("text");// e. 清除dataTransfer对象中的数据内容
			d1.removeChild(ele1);// f. 将源元素从页面中删除
		});
		d2.addEventListener("dragover",function(){event.preventDefault();});
		d2.addEventListener("dragleave",dragleave);
		function dragleave(){
			event.preventDefault();
			event.dataTransfer.clearData("text");
		}
	}

完整demo下载: https://download.csdn.net/download/u010564801/89037997

示例效果如下:将源元素图片拖动至目标元素框内

相关推荐
长安——归故李17 小时前
【PLC程序学习】
java·c语言·javascript·c++·python·学习·php
狼爷17 小时前
前端项目从 Windows 到 Linux:构建失败的陷阱
前端·node.js·angular.js
1024小神17 小时前
vitepress多语言实现第一次跟随浏览器,第二次不跟随
前端
叫我詹躲躲17 小时前
🚀 震撼!10道DFS&BFS神级题目让你的算法能力飙升300%
前端·leetcode
ssshooter17 小时前
WebGL 切换 Shader 的策略
前端·webgl
WDyinh17 小时前
积分球领取补位动画实现
前端·javascript
前端开发爱好者17 小时前
v5.0 版本发布!Vue3 生态最强大的 3D 开发框架!
前端·javascript·vue.js
Sosse17 小时前
window.close()失效 + Chrome浏览器调试线上代码
前端·浏览器
干就完事了17 小时前
Edge 浏览器安装selenium
前端·selenium·edge
IT_陈寒18 小时前
Vue3性能优化实战:这5个技巧让我的应用加载速度提升70%
前端·人工智能·后端