原生拖拽-通过数据判断是否可以被放置
原生拖拽–根据数据判断是否可以被放置
dragstart可以写入数据,drop可以读取数据。其他的拖拽事件不可获取数据
但是往往人们需要动态得知是否可以被拖动放置,因此需要在dragover中获取到数据。
实现思路
将数据存放在window或者vuex中,将数据的id绑定在事件参数中,通过id获取原始数据,进而判断是否可以被放置
解决方案
- 在window中挂载数据对象,如dragData,在dragstart的时候,添加’text/${dataId}'数据项,这里的dataId即是数据的id,它应该在dragData中存在。
- 当dragover时,虽然e.dataTransfer.getData()方法获取不到数据,但是e.dataTransfer.types是可以拿到先前在dragstart中设置的’text/${dataId}'这个数据项的名字的,从这里可以解析出dataId
- 用dataId在dragData中查找即可获取被拖动的完整数据
- 当判定可以放置的时候,对dragover的参数 e,执行e.preventDefault()即可禁止浏览器默认对dragover的处理,使拖拽可以被放置。
例子
1 | ondragstart(e) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mosu!
评论
ArtalkGitalk


Mosu is located on the shore of Mosu Lake, facing the vast Chu Sea, backed by the Yihan Mountains. Thousands of miles of Mosu Desert can not erode the Mosu Valley. Thus the Mosu Empire was established.


