import ScrollOut from "./ScrollOut"; const { ccclass, property, menu } = cc._decorator; @ccclass @menu('Scroll/ScrollInner') export default class ScrollInner extends cc.ScrollView { scrollOutView: ScrollOut canScroll: boolean = true setOuterScrollView(outer) { this.scrollOutView = outer; } //#region 重写cc.ScrollView的方法 _onTouchMoved(event, captureListeners) { if (!this.enabledInHierarchy) return; if (this._hasNestedViewGroup(event, captureListeners)) return; var touch = event.touch; var deltaMove = touch.getLocation().sub(touch.getStartLocation()); if (this.content) { if (this.canScroll) { this["_handleMoveLogic"](touch); } } if (!this.cancelInnerEvents) { return; } if (deltaMove.mag() > 7) { if (!this["_touchMoved"] && event.target !== this.node) { var cancelEvent = new cc.Event.EventTouch(event.getTouches(), event.bubbles); cancelEvent.type = cc.Node.EventType.TOUCH_CANCEL; cancelEvent.touch = event.touch; cancelEvent["simulate"] = true; event.target.dispatchEvent(cancelEvent); this["_touchMoved"] = true; } } this["_stopPropagationIfTargetIsMe"](event); } //#region 重写cc.ScrollView的方法 _hasNestedViewGroup(event, captureListeners) { if (event.eventPhase !== cc.Event.CAPTURING_PHASE) return; //不阻止out上onTouch事件执行。 return false; } //#endregion }