useHandleMoveUpAndDown.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /**
  2. * 处理列表的上下移动
  3. */
  4. import { Ref, ref } from 'vue'
  5. export function useHandleMoveUpAndDown(moveableList: Ref, rowHeight: number = 42) {
  6. // 处理试题的上下移动
  7. const startYPointer = ref(0) //记录移动开始点
  8. const HandleDragStart = (e: DragEvent) => {
  9. console.log('开始拖动了', e)
  10. startYPointer.value = e.clientY
  11. }
  12. const HandleDragEnd = (e: DragEvent, row:any, currentIndex: number) => {
  13. console.log('结束拖动了', e)
  14. let endYPointer = e.clientY
  15. let moveNum = 0
  16. if(endYPointer > startYPointer.value){
  17. // 下移层数
  18. moveNum = Math.ceil((endYPointer - startYPointer.value) / rowHeight)
  19. let maxLength = moveableList.value.length
  20. if(moveNum > 0){
  21. // 删除当前位置数据
  22. moveableList.value.splice(currentIndex,1)
  23. // 在目标位置添加数据
  24. moveableList.value.splice(Math.min(currentIndex + moveNum - 1,maxLength),0,row)
  25. }
  26. }else{
  27. // 上移层数
  28. moveNum = Math.ceil(( startYPointer.value - endYPointer) / rowHeight)
  29. if(moveNum > 0){
  30. // 删除当前位置数据
  31. moveableList.value.splice(currentIndex,1)
  32. // 在目标位置添加数据
  33. moveableList.value.splice(Math.max(currentIndex - moveNum,0),0,row)
  34. }
  35. }
  36. }
  37. return {
  38. HandleDragStart,
  39. HandleDragEnd
  40. }
  41. }