vue-drag-drop是HTML中Drag/Drop拖放接口在Vue中的封装。
HTML元素拖放的基本原理是:
- 鼠标选中一个可拖动的元素,移动鼠标到一个可放置的元素上,然后释放鼠标
- 在拖动放置操作期间,会触发一系列事件,通过监听响应这些事件实现界面交互
- 可拖动元素需添加属性draggable=”true”
- 可放置元素需设置ondragover和ondrop响应事件
- 在可拖动元素的ondragstart事件中,在dataTransfer属性上设置拖动的数据、图像和效果
- 在可放置元素的ondrop事件中,获取放置上来的元素所携带的数据
这里是Vue中使用vue-drag-drop实现的拖放,演示将诗词列表拖动到唐诗或宋词区域中实现分类收藏,借助Vuex在drag-panel和drop-panel组件之间共享拖放状态。
拖动相关的store模块,dragType存放当前拖动元素的类型,是唐诗还是宋词。
可拖动元素组件,拖动数据为诗词内容,开始拖动时设置dragType,拖动结束后清空dragType。通过slot设置了拖动时跟随鼠标的显示图像,相当于调用事件的dataTransfer.setDragImage方法。
诗词的分类区域为可放置元素,当可拖动元素开始拖动时,与dragType相同的分类区域样式提示可放置,而其他分类区域则样式置灰,并通过@dragover事件将拖动效果dropEffect设为none。释放鼠标时,通过@drop事件获取诗词信息,保存收藏数据。
主页面,组合拖动和放置组件,获取数据。
诗词数据列表。