H5拖放

HTML新特性之七 —— 拖放API —— 小重点&小难点

Drag:拖动

Drop:释放、丢弃

Drag & Drop: D&D,拖动着一个元素可以在页面中某处释放操作。

HTML5中为拖放操作提供了七个事件句柄:

拖动的源对象(被拖动的对象)可以触发三个事件:

   (1)dragstart:拖动开始事件

   (2)drag: 拖动进行中事件

   (3)dragend:拖动结束事件

   一个拖动过程的组成:

1个dragstart + N个drag + 1个dragend

   练习:实现一个可以随着拖动而移动的小飞机

   提示:飞机图片必须绝对定位,才能修改left/top!drag事件中有e.pageX/Y,获取拖动事件相对于页面的坐标。

拖动的目标对象(固定不动的对象)可以触发四个事件:

   (4)dragenter:拖动着进入事件

   (5)dragover:拖动着在上方悬停事件

   (6)dragleave:拖动着离开事件

   (7)drop:在上方释放/松开

   一个拖动过程对于目标对象可以由如下的事件组成:

   1个dragenter + N个dragover + 1个dragleave

   或者

   1个dragenter + N个dragover + 1个drop

   注意:只有阻止dragover的默认行为才可能触发drop!

7.如何在一次拖动事件的源对象和目标对象间传递数据?

HTML5的拖放API为拖放事件对象提供了一个新属性:

   event.dataTransfer

数据转移对象(拖拉机)——用于在源对象和目标对象间传递数据。注意:源对象和目标对象的事件间的dataTransfer不是同一个对象,但是可以用这些不同的dataTransfer对象传递数据!

   源对象的事件处理中——海南:

          event.dataTransfer.setData(key,  value)

   目标对象的事件处理中——东北:

          var value = event.dataTransfer.getData(key)

   注意:key和value都只能是字符串

案例:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
body {
text-align: center;
}
</style>
</head>
<body>
<h3>拖动的目标对象可以触发的事件</h3>
<p>3个飞机+1个垃圾箱,拖动着某个小飞机到垃圾箱上方,若松手了,就从DOM树上删除该小飞机</p>
<h3>不使用全局变量!</h3>
<img src="img/trash.png" id="trash">
<hr>
<img src="img/p3.png" id="p3" class="plane">
<img src="img/p4.png" id="p4" class="plane">
<img src="img/p5.png" id="p5" class="plane">

<script>
/*必须在源对象拖动开始时,记录是哪一个
在目标对象上释放时,删除该源对象*/

var list = document.querySelectorAll('.plane');
for(var i=0; i<list.length; i++){
var p = list[i];
//源对象可以触发的事件
p.ondragstart = function(e){
//源对象事件中保存数据
//e.dataTransfer.setData('planeID', '9999');
e.dataTransfer.setData('planeID', this.id);
}
p.ondrag = function(){}
p.ondragend = function(){}
}

//目标对象可以触发的事件
trash.ondragenter = function(){}
trash.ondragover = function(e){
e.preventDefault();
}
trash.ondragleave = function(){}
trash.ondrop = function(e){
//目标对象读取源对象传递的数据
var pid = e.dataTransfer.getData('planeID');
console.log('drop:'+ pid )
var p = document.getElementById(pid);
p.parentNode.removeChild(p);
}
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值