html5的拖拽事件

原生拖放

一、若要一个元素可以被拖放,首先要为元素添加draggable属性

true可以被拖放
false不可以被拖放
auto除img或url以外都可以被拖放
其他值都不可以被拖放

 

注释:在火狐中设置draggable属性无用,但可以再dragstart事件中为dataTransfer对象中添加setData()方法后就可以允许被拖拽。支持draggable的属性的浏览器有IE10+、Firefox 4+、Safari 5+,chrome,Opera 11.5+.

二、拖拽发生过程

     被拖拽元素

dragstart按下鼠标键并开始移动鼠标时
drag

在dragstart事件之后,在元素被拖动期间会持续触发该事件

dragend当拖动停止时,会触发dragend事件

   

 

 

 

 放置目标元素

dragenter有元素被拖动到放置目标上
dragover

紧随dragenter发生,在被拖动的元素

还在放置目标范围内移动时,会持续触发该事件

dragleave在元素被拖出放置目标时触发
drop元素被放到了放置目标中触发

 

 

 

 

 

 

注释:拖拽发生过程:dragstart->drag->dragenter->dragover->dragleave/drop->dragend

三、自定义放置目标

    原因:所有元素默认是不允许放置的,尽管都支持放置目标事件,当拖放元素经过不允许放置的元素时,就会看到一种特殊光标(圆环中有一条反斜线)。

    解决方法:把任何元素都变成有效的放置目标,重写dragenter和dragover事件的默认行为.如

function prevent(e){
   var e = e || window.event;
   e.preventDefault(e);
}

droptarget.dragover = prevent;
droptarget.dragenter = prevent;

此时特殊光标会变成允许放置的光标。

注释:firfox 3.5+中,放置事件的默认行为是打开被放到放置目标上的url,为支持FireFox支持正常的拖放,还要取消drop事件的默认行为,阻止它打开URL.

四、dataTransfer对象

     IE5引入了dataTransfer对象,它是事件对象的一个属性,用于从被拖动元素向放置目标传递字符串格式的数据。

setData()保存值,第一个参数可以是“text/plain"和"text/uri-list"
getData()获取在setData()中保存的值。
dropEffect属性,知道被拖动的元素能够执行哪种放置行为。搭配effectAllowed属性才有用
effectAllowed属性,表示允许拖动元素的哪种dropEffect.

 

 

 

注意:dataTransfer对象中的数据只能在drop事件处理程序中读取。如果ondrop处理程序中没有读到数据,那就是dataTransfer对象已经被销毁,数据也丢失了。

dropEffect的值含义
none不能把拖动的元素放在这里
move应该把拖动的元素移动到放置目标
copy应该把拖动的元素复制到放置目标
link表示放置目标会打开拖动的元素(但拖动的元素必须是一个连接,有URL)

 

 

 

 

 

effectAllowed值含义
uninitialized没有给被拖动的元素设置任何放置行为
none

被拖动的元素不能有任何行为

copy只允许值为'copy'的dropEffect
link只允许值为'link'的dropEffect
move只允许值为'move'的dropEffect
copyLink只允许值为'copy'和“link”的dropEffect
copyMove只允许值为'copy'和“move”的dropEffect
linkMove只允许值为'move'和“link”的dropEffect
all允许任意的dropEffect

转载于:https://www.cnblogs.com/AliceX-J/p/5269346.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值