原生拖拽-通过数据判断是否可以被放置
原生拖拽–根据数据判断是否可以被放置
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