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

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

相关推荐
sunbyte1 分钟前
Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)
javascript·react.js·3d
2401_831943328 分钟前
Element Plus对话框(ElDialog)全面指南:打造灵活弹窗交互
前端·vue.js·交互
strongwyy15 分钟前
DA14585墨水屏学习(2)
前端·javascript·学习
好青崧29 分钟前
冒泡排序的原理
前端
椒盐螺丝钉38 分钟前
CSS 基础知识分享:从入门到注意事项
前端·css
球球和皮皮44 分钟前
Babylon.js学习之路《一、初识 Babylon.js:什么是 3D 开发与 WebGL 的完美结合?》
javascript·3d·前端框架·ar·vr
冬阳春晖1 小时前
web animation API 锋利的css动画控制器 (更新中)
前端·javascript·css
Python私教2 小时前
使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门
前端·react.js·fastapi
浪裡遊2 小时前
Typescript中的对象类型
开发语言·前端·javascript·vue.js·typescript·ecmascript
杨-羊羊羊2 小时前
什么是深拷贝什么是浅拷贝,两者区别
开发语言·前端·javascript