UNPKG

17.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"gesture.js","sourceRoot":"","sources":["../../../src/chart/controller/gesture.ts"],"names":[],"mappings":"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","sourcesContent":["import { ICanvas } from '../../dependents';\nimport { Point } from '../../interface';\nimport { View } from '../view';\nimport { Controller } from './base';\n\nconst PRESS_DELAY = 250;\n\n// 计算滑动的方向\nconst calcDirection = (start: Point, end: Point) => {\n const xDistance = end.x - start.x;\n const yDistance = end.y - start.y;\n // x 的距离大于y 说明是横向,否则就是纵向\n if (Math.abs(xDistance) > Math.abs(yDistance)) {\n return xDistance > 0 ? 'right' : 'left';\n }\n return yDistance > 0 ? 'down' : 'up';\n};\n\n// 计算2点之间的距离\nconst calcDistance = (point1: Point, point2: Point) => {\n const xDistance = Math.abs(point2.x - point1.x);\n const yDistance = Math.abs(point2.y - point1.y);\n return Math.sqrt(xDistance * xDistance + yDistance * yDistance);\n};\n\nconst getCenter = (point1, point2) => {\n const x = (point1.x + point2.x) / 2;\n const y = (point1.y + point2.y) / 2;\n return { x, y };\n};\n\nconst convertPoints = (touches, canvas: ICanvas) => {\n if (!touches) {\n return;\n }\n const points = [];\n const len = touches.length;\n for (let i = 0; i < len; i++) {\n const touch = touches[i];\n // x, y: 相对canvas原点的位置,clientX, clientY 相对于可视窗口的位置\n const { clientX, clientY } = touch;\n const point = canvas.getPointByClient(clientX, clientY);\n points.push(point);\n }\n return points;\n};\n\nexport default class GestureController extends Controller {\n private canvas: ICanvas;\n private processEvent = {};\n\n private startTime: number;\n private startPoints: Point[];\n private startDistance: number;\n private center: Point;\n private pressTimeout;\n private direction: string;\n private prevMoveTime: number;\n private prevMovePoints: Point[];\n private lastMoveTime: number;\n private lastMovePoints: Point[];\n private eventType: string;\n\n constructor(view: View) {\n super(view);\n\n this.canvas = view.getCanvas();\n\n this.delegateEvent();\n\n // 用来记录当前触发的事件\n this.processEvent = {};\n }\n\n public get name(): string {\n return 'gesture';\n }\n\n public init() {}\n\n public render() {}\n\n public layout() {}\n\n public update() {}\n\n public destroy() {\n this.reset();\n this.offEvent();\n this.processEvent = null;\n }\n\n private delegateEvent() {\n // 代理这几个事件\n this.canvas.on('touchstart', this.touchStart);\n this.canvas.on('touchmove', this.touchMove);\n this.canvas.on('touchend', this.touchEnd);\n }\n\n private offEvent() {\n this.canvas.off('touchstart', this.touchStart);\n this.canvas.off('touchmove', this.touchMove);\n this.canvas.off('touchend', this.touchEnd);\n }\n\n private touchStart = (ev): void => {\n const points = convertPoints(ev.originalEvent.touches, this.canvas);\n if (!points) {\n return;\n }\n ev.points = points;\n // 防止上次的内容没有清理掉,重新reset下\n this.reset();\n // 记录touch start 的时间\n this.startTime = Date.now();\n // 记录touch start 的点\n this.startPoints = points;\n if (points.length > 1) {\n this.startDistance = calcDistance(points[0], points[1]);\n this.center = getCenter(points[0], points[1]);\n } else {\n // 如果touchstart后停顿250ms, 则也触发press事件\n this.pressTimeout = setTimeout(() => {\n // 这里固定触发press事件\n const eventType = 'press';\n ev.direction = 'none';\n this.emitStart(eventType, ev);\n this.emitEvent(eventType, ev);\n this.eventType = eventType;\n }, PRESS_DELAY);\n }\n };\n\n private touchMove = (ev): void => {\n const points = convertPoints(ev.originalEvent.touches, this.canvas);\n if (!points) {\n return;\n }\n this.clearPressTimeout();\n ev.points = points;\n\n const startPoints = this.startPoints;\n if (!startPoints) {\n return;\n }\n // 多指触控\n if (points.length > 1) {\n // touchstart的距离\n const startDistance = this.startDistance;\n const currentDistance = calcDistance(points[0], points[1]);\n ev.zoom = currentDistance / startDistance;\n ev.center = this.center;\n // 触发缩放事件\n this.emitStart('pinch', ev);\n this.emitEvent('pinch', ev);\n } else {\n const deltaX = points[0].x - startPoints[0].x;\n const deltaY = points[0].y - startPoints[0].y;\n const direction = this.direction || calcDirection(startPoints[0], points[0]);\n this.direction = direction;\n\n // 获取press或者pan的事件类型\n // press 按住滑动, pan表示平移\n // 如果start后立刻move,则触发pan, 如果有停顿,则触发press\n const eventType = this.getEventType(points);\n\n ev.direction = direction;\n ev.deltaX = deltaX;\n ev.deltaY = deltaY;\n this.emitStart(eventType, ev);\n this.emitEvent(eventType, ev);\n\n // 记录最后2次move的时间和坐标,为了给swipe事件用\n const prevMoveTime = this.lastMoveTime;\n const now = Date.now();\n // 最后2次的时间间隔一定要大于0,否则swipe没发计算\n if (now - prevMoveTime > 0) {\n this.prevMoveTime = prevMoveTime;\n this.prevMovePoints = this.lastMovePoints;\n this.lastMoveTime = now;\n this.lastMovePoints = points;\n }\n }\n };\n\n private touchEnd = (ev): void => {\n this.emitEnd(ev);\n\n // swipe事件处理, 在touchend之后触发\n const lastMoveTime = this.lastMoveTime;\n const now = Date.now();\n // 做这个判断是为了最后一次touchmove后到end前,还有一个停顿的过程\n // 100 是拍的一个值,理论这个值会很短,一般不卡顿的话在10ms以内\n if (now - lastMoveTime < 100) {\n const prevMoveTime = this.prevMoveTime || this.startTime;\n const intervalTime = lastMoveTime - prevMoveTime;\n // 时间间隔一定要大于0, 否则计算没意义\n if (intervalTime > 0) {\n const prevMovePoints = this.prevMovePoints || this.startPoints;\n const lastMovePoints = this.lastMovePoints;\n // move速率\n const velocity = calcDistance(prevMovePoints[0], lastMovePoints[0]) / intervalTime;\n // 0.3 是参考hammerjs的设置\n if (velocity > 0.3) {\n ev.velocity = velocity;\n ev.direction = calcDirection(prevMovePoints[0], lastMovePoints[0]);\n this.emitEvent('swipe', ev);\n }\n }\n }\n\n this.reset();\n\n const touches = ev.touches;\n // 当多指只释放了1指时也会触发end, 这时重新触发一次start\n if (touches && touches.length > 0) {\n this.touchStart(ev);\n }\n };\n\n private emitEvent(type, ev) {\n const view = this.view;\n view.emit(type, ev);\n }\n\n // 触发start事件\n private emitStart(type, ev) {\n if (this.isProcess(type)) {\n return;\n }\n this.enable(type);\n this.emitEvent(`${type}start`, ev);\n }\n // 触发end事件\n private emitEnd(ev) {\n const processEvent = this.processEvent;\n Object.keys(processEvent).forEach((type) => {\n this.emitEvent(`${type}end`, ev);\n delete processEvent[type];\n });\n }\n\n private enable(eventType: string) {\n this.processEvent[eventType] = true;\n }\n // 是否进行中的事件\n private isProcess(eventType: string) {\n return this.processEvent[eventType];\n }\n\n private reset() {\n this.clearPressTimeout();\n this.startTime = 0;\n this.startPoints = null;\n this.startDistance = 0;\n this.direction = null;\n this.eventType = null;\n this.prevMoveTime = 0;\n this.prevMovePoints = null;\n this.lastMoveTime = 0;\n this.lastMovePoints = null;\n }\n\n private clearPressTimeout() {\n if (this.pressTimeout) {\n clearTimeout(this.pressTimeout);\n this.pressTimeout = 0;\n }\n }\n\n private getEventType(points) {\n const { eventType, view, startTime, startPoints } = this;\n if (eventType) {\n return eventType;\n }\n let type;\n const panEventListeners = view.getEvents().pan;\n // 如果 view 上没有 pan 事件的监听,默认都是 press\n if (!panEventListeners || !panEventListeners.length) {\n type = 'press';\n } else {\n // 如果有pan事件的处理,press则需要停顿250ms, 且移动距离小于10\n const now = Date.now();\n if (now - startTime > PRESS_DELAY && calcDistance(startPoints[0], points[0]) < 10) {\n type = 'press';\n } else {\n type = 'pan';\n }\n }\n this.eventType = type;\n return type;\n }\n}\n"]}
\No newline at end of file