ivue-material-plus
Version:
A high quality UI components Library with Vue.js
1 lines • 7.93 kB
Source Map (JSON)
{"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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"}