diff --git a/src/core/view/components/canvas/index.vue b/src/core/view/components/canvas/index.vue index 50212e8adc5b312d0df79f5774c46b0618db6be7..ec7db333be67b91d02488182481e7a92e0e840eb 100644 --- a/src/core/view/components/canvas/index.vue +++ b/src/core/view/components/canvas/index.vue @@ -2,9 +2,7 @@ + v-on="_listeners"> { + var boundingClientRect = target.getBoundingClientRect() + return { + identifier: touche.identifier, + x: touche.clientX - boundingClientRect.x, + y: touche.clientY - boundingClientRect.y + } + }) +} + export default { name: 'Canvas', mixins: [subscriber], @@ -49,6 +58,27 @@ export default { computed: { id () { return this.canvasId + }, + _listeners () { + var $listeners = Object.assign({}, this.$listeners) + var events = ['touchstart', 'touchmove', 'touchend'] + events.forEach(event => { + var existing = $listeners[event] + var eventHandler = [] + if (existing) { + eventHandler.push(($event) => { + this.$trigger(event, Object.assign({}, $event, { + touches: processTouches($event.currentTarget, $event.touches), + changedTouches: processTouches($event.currentTarget, $event.changedTouches) + })) + }) + } + if (this.disableScroll && event === 'touchmove') { + eventHandler.push(this._touchmove) + } + $listeners[event] = eventHandler + }) + return $listeners } }, created () { @@ -79,9 +109,7 @@ export default { } }, _touchmove (event) { - if (this.disableScroll) { - event.preventDefault() - } + event.preventDefault() }, actionsChanged ({ actions, diff --git a/src/core/view/plugins/events.js b/src/core/view/plugins/events.js index 3bb6f28da6396e42b28f6e6fd61ec704c009d9b1..baaa5fdbb7503f8a52e41cdc7ecf9f810e4adefe 100644 --- a/src/core/view/plugins/events.js +++ b/src/core/view/plugins/events.js @@ -82,8 +82,9 @@ export function processEvent (name, $event = {}, detail = {}, target = {}, curre detail: detail, target: processTarget(target, detail), currentTarget: processTarget(currentTarget), - touches: processTouches($event.touches), - changedTouches: processTouches($event.changedTouches), + // 只处理系统事件 + touches: $event instanceof Event ? processTouches($event.touches) : $event.touches, + changedTouches: $event instanceof Event ? processTouches($event.changedTouches) : $event.changedTouches, preventDefault () { }, stopPropagation () { } })