Web前端之路程序员

Javascript知识整理——拖放

2017-10-03  本文已影响52人  俗三疯

拖放事件

拖动某元素时,将依次触发下列事件(被拖动元素):

当某个元素被拖动到了一个有效的放置目标上时,下列事件会依次发生(放置目标):

自定义放置目标

在拖动元素经过某些无效放置目标时,可以看到有特殊的光标(圆环带斜线)来提示用户不能把元素放置在该目标上面,这些放置目标默认是不允许放置的,不管用户如何操作,都不会发生drop事件。

把元素变成有效的放置目标的方法:
重写dragenter和drogover事件的默认行为

EventUtil.addHandler(droptarget,"dragover",function(event){
     EventUtil.preventDefalut(event);
})
...

以上代码执行后,光标变成了允许放置的符号。释放鼠标也会触发drop事件。
由于在Firfox浏览器中,放置事件的默认行为是打开被放到放置目标的URL
因此还要取消drop事件的默认行为,阻止它打开URL

dataTransfer对象

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

注意: 保存在dataTransfer对象中的数据只能在drop事件处理程序中读取,否则dataTransfer被销毁,数据也就丢失了。

浏览器的默认处理
在拖动文本框的文本时,浏览器会调用setData()方法,将拖动的文本以“text”格式保存在dataTransfer对象中,在拖动链接或图像时,会调用setData()保存URL,然后被拖动到放置目标是,就可以通过getData()读取这些数据。
我们也可以在dragStart事件处理程序中调用setData(),手工保存自己要传输的数据,以便将来使用。

dropEffect与effectAllowed

dropEffect属性可以知道被拖动的元素能够执行哪种放置行为(改变光标的样式),有四个可能的值

effectAllowed属性表示允许拖动元素的哪种dropEffect

可拖动

默认情况下,图像、链接和文本是可以拖动的,让其他元素可以拖动的方法是设置元素的draggable属性为true

其他成员(兼容性较差)

HTML5规范规定dataTransfer还有以下方法和属性

上一篇下一篇

猜你喜欢

热点阅读