iTakeo

HTML5拖放(Drag 和 drop)…

首先,为了使元素可拖动,需要给元素添加draggable的 属性,并且设置为 true :

  1. <div draggable=“true”></div>  

当元素拖动时,会发生以下几个事件,虽然跟鼠标的mousedown,mousemove和mouseup类似,但是也有区别:

  1. ondragstart //拖拽开始  
  2. ondrag        //拖拽持续  
  3. ondragend  //拖拽结束  

这里火狐有个bug,元素拖拽的时候,需要设置一下setData,之后drag和dragend才能正常工作:

ondragstart事件演示(拖动下面的灰色区域):

  1. div.ondragstart = function(ev){  
  2.     var e = ev || window.event;  
  3.     e.dataTransfer.setData(‘data’,’val’)  
  4.     this.innerHTML=’我被拖拽了’;  
  5. }  

ondragend事件演示(拖动下面的灰色区域):

  1. div.ondragstart = function(ev){  
  2.     var e = ev || window.event;  
  3.     e.dataTransfer.setData(‘data’,’val’)  
  4.     this.innerHTML=’我被拖拽了’;  
  5. }  
  6. div.ondragend = function(){    
  7.     this.innerHTML=’拖拽结束’;    
  8. }  

ondrag事件演示(拖动下面的灰色区域),需要注意的是,只要你开始了拖拽事件,这里的drag是一直在触发的,哪怕是鼠标静止不动,可以拖动下面的div看效果,这一点跟mousemove不同

  1. div.ondrag = function(){  
  2.     this.innerHTML=i++;  
  3. }  

以上三个事件,是针对拖动对象的,接下来还有三个事件,是针对拖动到某个放置元素上时触发的事件:

  1. ondragenter     //拖动元素进入到放置目标时触发。  
  2. ondragover      //拖动元素在放置目标范围内拖动时触发此事件,类似ondrag事件。  
  3. ondragleave    //拖动元素离开放置目标时触发此事件  
  4. ondrop            //拖动元素在放置目标上释放鼠标时触发  

ondragenter和ondragleave事件的演示(拖动下面的灰色区域到目标位置):

拖动我去目标位置
目标位置
  1. div.ondragstart = function(ev){  
  2.     var e = ev || window.event;  
  3.     e.dataTransfer.setData(‘data’,’val’)  
  4. }  
  5. target.ondragenter = function(){  
  6.     this.style.background=’#999′;  
  7. }  
  8. target.ondragleave = function(){  
  9.     this.style.background=’#ccc’;  
  10. }  

ondragover和ondrag事件类似,也是一直在触发,前提是鼠标在目标元素上,就不在演示了。

ondrop事件演示,需要注意的是,要想drop事件触发,必须在dragover事件中阻止默认事件。

拖动我去目标位置
目标位置
  1. div.ondragstart = function(ev){  
  2.     var e = ev || window.event;  
  3.     e.dataTransfer.setData(‘data’,’val’)  
  4. }  
  5. target.ondragover = function(ev){  
  6.     var e = ev || window.event;  
  7.     this.style.background=’#999′;  
  8.     ev.preventDefault()  
  9. }  
  10. target.ondragleave = function(){  
  11.     this.style.background=’#ccc’;  
  12. }  
  13. target.ondrop = function(){  
  14.     this.style.background=’#ccc’;  
  15.     alert(‘拖放成功’);  
  16. }  

拖放有关的dataTransfer对象:

1. setData和getData。
下面是关于setData和getData的使用,拖动的时候设置data,然后再目标元素释放鼠标来获取data。

  1. setData(key,value) //设置数据,两个参数  
  2. getData(key)      //获取数据,根据key获取  
拖动
目标
  1. div.ondragstart = function(ev){  
  2.     var e = ev || window.event;  
  3.     e.dataTransfer.setData(‘data’,’数据123′)  
  4. }  
  5. target.ondrop = function(ev){  
  6.     var e = ev || window.event;  
  7.     alert(e.dataTransfer.getData(‘data’));  
  8. }  

2. effectAllowed:设置拖拽鼠标的样式
分别有(none,copy,copyLink,copyMove,link,linkMove,move,all,uninitialized),具体不做演示。

  1. e.dataTransfer.effectAllowed = ‘link’  

3. setDragImage设置拖拽的样式,默认拖拽样式是复制一个拖拽元素且半透明的,这个可以设置成其他的。

  1. //有三个参数,第一个设置成显示的对象,第二个是坐标位置  
  2. e.dataTransfer.setDragImage(o,x,y)  
拖拽看看
  1. //这里我把要显示的元素,设置成任意一个div元素,也可以设置成其他元素,或者img图片  
  2. div.ondragstart = function(ev){  
  3.     var e = ev || window.event;  
  4.     e.dataTransfer.setData(‘data’,’数据123′)  
  5.     e.dataTransfer.setDragImage(document.querySelector(‘.dragimg’),0,0)  
  6. }  

下面就是根据以上写了一个基本的demo演示,功能类似拖拽添加购物车,点击删除等。

1
2
3
4

2015/07/11 2 / /
标签:  暂无标签

评论回复

  1. 回复 Bruce

    😀 😀 😀 大神啊带带我

  2. 回复 匿名

    亲亲你:cool: 😎 😎

验证码: 9 + 3 =

回到顶部