H5 学习笔记(day01) 拖放API、dataTransfer对象

拖放事件

在H5中,任何元素都支持拖放,但是需要注意的是,有些元素存有默认事件比如( a元素 ),应当取消该元素的默认事件

使用 preventDefault() 取消事件的默认动作
用法 ele.preventDefault()

  • 拖动事件
事件概述
ondragstart当元素开始被拖动时触发——开始拖动
ondrag拖动时触发(不管鼠标有没有移动)——正在拖动
ondragend元素在拖动操作结束(放置)时——拖动结束

注意:ondrag事件在拖动元素时一直触发

<body>
	<img src="1.jpg" id='1' alt="">
	<img src="2.jpg" id='2' alt="">
	<img src="3.jpg" id='3' alt="">
	<img src="4.jpg" id='4' alt="">
	<img src="5.jpg" id='5' alt="">
</body>
<script>
	img[0].ondragstart = function(e){
		console.log('我开始开始拖动了')
		}
	img[0].ondrag = function(e){
		console.log('我正在拖动呢')
	}
	img[0].ondragend = function(e){
		console.log('我拖动结束了')
	}
	img[1].ondragenter = function(e){
		console.log(e.target)
		console.log('img[0]拖动到我身上触发了我')
	}
	img[1].ondragover = function(e){
		e.preventDefault()
		console.log(e.target)
		console.log('img[0]在我身上拖动不断触发了我')
	}
	img[1].ondragleave = function(e){
		
		console.log(e.target)
		console.log('img[0]在我身上离开触发了我')
	}
	img[1].ondrop = function(e){
		console.log(e.target)
		console.log('img[0]释放在我身上触发了我')
		//但是要在ondragover事件上阻止默认事件e.preventDefault()才能触发我不然没效果
	}
</script>
  • 放置事件
事件描述
ondragenter被拖放的元素开始进入另外一个元素的范围内时触发
ondragover拖放源在元素内部拖动时不断被触发
ondragleave拖放源离开元素边界时触发
ondrop拖放源被释放(放置)到元素内部时触发

注意:只有在拖拽时触发相关事件,鼠标事件是不会触发的。

dataTransfer对象

属性

例子:e.dataTransfer.files

属性描述
files其他属性返回和放置相关的所有文件
types属性使用数组的形式返回当前注册格式
effectAllowed此属性通知浏览器当前可被用户选用的操作
dropEffect拖放的操作类型,决定了浏览器如何显示鼠标形状
items属性返回所有项与相关格式所有文件
方法

dataTransfer对象提供了一些方法用于在源元素与目标元素中共享数据

例子:e.dataTransfer.setDat( ‘data’,‘我是要储存的数据’ ) //在dataTransfer对象中注册此对象(data)

e.dataTransfer.getData( ‘data’ )

方法描述
setData(type,data)用于声明所发送的数据与类型
getData(type)返回指定type的数据
clearData(type)删除指定类型的数据 ,不填指定删除所有
setDragImage(element,x,y)使用图像元素作为参考,同时使用此参数作为拖放反回图像
addElement(element)提供一个页面元素作为参考,同时使用参数作为拖放反馈图像

注意:addElement()紧用于火狐

setDragImage(element,x,y)
//例子:
	<body>
		<img src="1.jpg" id='1' alt="">
		<img src="2.jpg" id='2' alt="">
		<img src="3.jpg" id='3' alt="">
		<img src="4.jpg" id='4' alt="">
		<img src="5.jpg" id='5' alt="">
	</body>
	<script>
	
			var img = document.getElementsByTagName('img')
			
			img[0].ondragstart = function(e){
				e.dataTransfer.setData('data','我是数据')//发送(储存)数据 (名字,数据)
				var data = e.dataTransfer.getData('data')//获取上面发送的 我是数据
				console.log(data) // 我是数据
				
				e.dataTransfer.setDragImage(img[2],50,50)
				//拖动出来的图片对象变成了自己所指定的图片
				// 本来拖出来的图片是自身( img[0] )  但是变成了 img[2] 因为指定了img[2] 
				// 50 50 是鼠标拖动时固定在相对于图片左上角的 0,0的位置 
			}
	</script>

setDragImage

addElement(element)

仅用于火狐


<body>
	<img src="1.jpg" id='1' alt="">
	<img src="2.jpg" id='2' alt="">
	<img src="3.jpg" id='3' alt="">
	<img src="4.jpg" id='4' alt="">
	<img src="5.jpg" id='5' alt="">
</body>
<script>
var img = document.getElementsByTagName('img')

	img[0].ondragstart = function(e){
		e.dataTransfer.addElement(img[2]) //按下拖动自身但是 显示拖动图片二
	}
</script>
效果如下:
  • 按下图片一的时候

在这里插入图片描述

  • 拖动图片一的时候在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值