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

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

相关推荐
Clockwiseee21 分钟前
js原型链污染
开发语言·javascript·原型模式
仙魁XAN42 分钟前
Flutter 学习之旅 之 flutter 在设备上进行 全面屏 设置/隐藏状态栏/隐藏导航栏 设置
前端·学习·flutter
hrrrrb1 小时前
【CSS3】化神篇
前端·css·css3
木木黄木木1 小时前
HTML5拼图游戏开发经验分享
前端·html·html5
BBbila1 小时前
小程序主包方法迁移到分包-调用策略
开发语言·javascript·微信小程序
不能只会打代码2 小时前
六十天前端强化训练之第十七天React Hooks 入门:useState 深度解析
前端·javascript·react.js
何包蛋H2 小时前
分享vue好用的pdf 工具实测
javascript·vue.js·pdf
PagiHi2 小时前
iWebOffice2015 中间件如何在Chrome107及之后的高版本中加载
前端·javascript·chrome·中间件·edge·js
曾富贵2 小时前
【eslint 插件】导入语句排序
前端·eslint
NaZiMeKiY2 小时前
HTML5前端第八章节
前端·html·html5