For the complete documentation index, see llms.txt. This page is also available as Markdown.

draggable拖拽排序和pointerEvent应用

draggable常用于PC页面的拖拽排序功能,由于原理基于HTML5中drag/drop/dragstart 等相关的事件,但是兼容性在h5/mobile中较差,且不支持!pointerEvent常用于需要多端兼容的拖动/拖拽项目需求,原理基于鼠标/触摸=>指针/点的监听事件,兼容性较好

draggable拖拽排序展示
pointerEvent的拖拽/操作功能展示

draggable拖拽排序

拖拽排序这类需求基本上使用draggable就可以满足,这里我用了vue-draggable的npm包,简单贴一个引用代码:

如果需要同时需要使用拖动左右滑动增强体验感可以参考使用指令,使其具备滑动/拖拽排序两种功能,阻止冒泡和冲突,贴一下指令代码用于参考:

事件在于document上绑定,跳出页面或者关闭组件需要及时移除该事件,否则可能会造成污染!

pointerEvent的拖拽/操作

鼠标或者单个点的up/down/move事件,那么为什么要使用pointerEvent呢?因为在开发中,我们常用的mouse/touch事件仅仅只是兼容各自的环境,虽然可以直接拿到完整的单个dom块的虚拟DOM,但是无法同时兼顾PC或者说移动端口。那么就可以使用pointerEvent。那么问题又来了!pointerEvent绑定在大的父级容器上,比如body,但是pointerEvent返回相关的坐标,那么怎么通过坐标去获取到相对应的DOM和相关的列表某个index的数据呢?这里我采用了elementsFromPoint的方法!贴一下代码作为参考

通过elementsFromPoint方法传入坐标获取当前坐标下的dom!

既然有了虚拟DOM那么接下来就是拿相关数据,可以把数据绑在DOM初次加载时写入DOM的attr/data!

在监听事件中返回的el对象中可以获取相对于的传参,用于前后端交互!

Last updated