这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战
drag-dialog 拖拽dialog
这是一个可以拖拽的dialog,看起来挺好玩的,但是真的会有这么鬼畜的需求么,撕不过产品么。。。
用到了elDragDialog指令
具体的实现在@/directive/el-drag-dialog/drag.js中,简单看一下js的实现,获取到页面中的dialog,鼠标按下,准备拖拽的时候,计算当前元素距离可视区域的距离,然后计算出移动的距离,进行一些边界处理,最后移动dialog的dom元素。
使用方式是给el-dialog加上@dragDialog="handleDrag"就行了,并且有一个@dragDialog="handleDrag"回调方法。
drag-select 拖拽select
可拖拽调整位置的select,组件是ElDragSelect,用法是和普通select一样的,因为它内部其实就是包了一层el-select
mounted后执行setSort方法,获取到包裹选择内容的大span,然后用sortablejs实现了拖拽逻辑
dnd-list 列表拖拽
实现了一个可以拖拽的列表,是基于Vue.Draggable写的,用起来很简单,把两个list传进去就行了
然后使用了vuedraggable,把两个list传进去,修改一下样式。
drag-kanban 拖拽看板
引入Kanban组件,直接就能使用了,也是用vuedraggable实现的
组件内是draggable,传list进去,v-bind与父组件进行通信,setData方法是为了修复火狐的一个bug,github.com/RubaXa/Sort… ,然后下面v-for遍历list,用div展示这些数据,写一些样式,
令我疑惑的是,这3个kanban是怎么互相之间可以拖拽的,似乎没有看到联系,除了group是相同的。
然后找了一下vuedraggable的文档www.itxst.com/vue-draggab… 果然是这个原因
至此官方提供的有趣小组件也学习完了,明天学什么再看吧~