{"version":3,"file":"touch.mjs","sources":["../../../../../src/utils/directives/touch.ts"],"sourcesContent":["interface Target extends Element {\r\n  _touchHandlers?: any;\r\n}\r\n\r\ntype Handlers = {\r\n  left: () => void;\r\n  right: () => void;\r\n  up: () => void;\r\n  down: () => void;\r\n  start: () => void;\r\n  move: () => void;\r\n  end: () => void;\r\n};\r\n\r\n// 处理手势\r\nfunction handleGesture(wrapper) {\r\n  const { touchstartX, touchendX, touchstartY, touchendY } = wrapper;\r\n\r\n  // 用于判断方向边界\r\n  const dirRatio = 0.5;\r\n  // 用于判断滑动距离是否满足滑动\r\n  const minDistance = 16;\r\n\r\n  // 手指滑动距离\r\n  wrapper.offsetX = touchendX - touchstartX;\r\n  wrapper.offsetY = touchendY - touchstartY;\r\n\r\n  // 判断左右滑动\r\n  if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\r\n    wrapper.left &&\r\n      touchendX < touchstartX - minDistance &&\r\n      wrapper.left(wrapper);\r\n    wrapper.right &&\r\n      touchendX > touchstartX + minDistance &&\r\n      wrapper.right(wrapper);\r\n  }\r\n\r\n  // 判断上下滑动\r\n  if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\r\n    wrapper.up && touchendY < touchstartY - minDistance && wrapper.up(wrapper);\r\n    wrapper.down &&\r\n      touchendY > touchstartY + minDistance &&\r\n      wrapper.down(wrapper);\r\n  }\r\n}\r\n\r\n// 开始\r\nfunction touchstart(event: TouchEvent, wrapper) {\r\n  const touch = event.changedTouches[0];\r\n  wrapper.touchstartX = touch.clientX;\r\n  wrapper.touchstartY = touch.clientY;\r\n\r\n  wrapper.start && wrapper.start(Object.assign(event, wrapper));\r\n}\r\n\r\n// 结束\r\nfunction touchend(event: TouchEvent, wrapper) {\r\n  const touch = event.changedTouches[0];\r\n  wrapper.touchendX = touch.clientX;\r\n  wrapper.touchendY = touch.clientY;\r\n\r\n  wrapper.end && wrapper.end(Object.assign(event, wrapper));\r\n\r\n  // 处理手势\r\n  handleGesture(wrapper);\r\n}\r\n\r\n// 移动\r\nfunction touchmove(event: TouchEvent, wrapper) {\r\n  const touch = event.changedTouches[0];\r\n  wrapper.touchmoveX = touch.clientX;\r\n  wrapper.touchmoveY = touch.clientY;\r\n\r\n  wrapper.move && wrapper.move(Object.assign(event, wrapper));\r\n}\r\n\r\n// 创建事件\r\nfunction createHandlers(value: Handlers) {\r\n  const wrapper = {\r\n    touchstartX: 0,\r\n    touchstartY: 0,\r\n    touchendX: 0,\r\n    touchendY: 0,\r\n    touchmoveX: 0,\r\n    touchmoveY: 0,\r\n    offsetX: 0,\r\n    offsetY: 0,\r\n    left: value.left,\r\n    right: value.right,\r\n    up: value.up,\r\n    down: value.down,\r\n    start: value.start,\r\n    move: value.move,\r\n    end: value.end,\r\n  };\r\n\r\n  return {\r\n    touchstart: (e: TouchEvent) => touchstart(e, wrapper),\r\n    touchend: (e: TouchEvent) => touchend(e, wrapper),\r\n    touchmove: (e: TouchEvent) => touchmove(e, wrapper),\r\n  };\r\n}\r\n\r\n// 指令定义\r\nfunction inserted(el: Element, binding: Record<string, any>) {\r\n  const value = binding.value;\r\n\r\n  const target: Target = value.parent ? el.parentElement : el;\r\n  const options = value.options || { passive: true };\r\n\r\n  if (!target) {\r\n    return;\r\n  }\r\n\r\n  const handlers = createHandlers(value);\r\n  target._touchHandlers = Object(target._touchHandlers);\r\n  target._touchHandlers[binding.instance.$.uid] = handlers;\r\n\r\n  // 添加事件\r\n  Object.keys(handlers).forEach((eventName) => {\r\n    target.addEventListener(eventName, handlers[eventName], options);\r\n  });\r\n}\r\n\r\n// 指令与元素解绑时调用\r\nfunction unbind(el: Element, binding: Record<string, any>) {\r\n  const target: Target = binding.value.parent ? el.parentElement : el;\r\n\r\n  if (!target || !target._touchHandlers) {\r\n    return;\r\n  }\r\n\r\n  const handlers = target._touchHandlers[binding.instance.$.uid];\r\n  Object.keys(handlers).forEach((eventName) => {\r\n    target.removeEventListener(eventName, handlers[eventName]);\r\n  });\r\n\r\n  delete target._touchHandlers[binding.instance.$.uid];\r\n}\r\n\r\nexport default {\r\n  beforeMount: inserted,\r\n  unmounted: unbind,\r\n};\r\n"],"names":[],"mappings":"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"}