Skip to content

Commit dca77e1

Browse files
committed
multiScroller
1 parent b4b5ecb commit dca77e1

File tree

4 files changed

+87
-36
lines changed

4 files changed

+87
-36
lines changed

build/eui/eui.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9036,6 +9036,11 @@ declare module eui {
90369036
* @param event
90379037
*/
90389038
private onTouchMove(event);
9039+
/**
9040+
* @private
9041+
* @param event
9042+
*/
9043+
private onTouchCancel(event);
90399044
/**
90409045
* @private
90419046
* @param event

build/eui/eui.js

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13144,16 +13144,6 @@ var eui;
1314413144
if (!canScroll) {
1314513145
return;
1314613146
}
13147-
var target = event.target;
13148-
while (target && target != this) {
13149-
if (target instanceof Scroller) {
13150-
canScroll = target.checkScrollPolicy();
13151-
if (canScroll) {
13152-
return;
13153-
}
13154-
}
13155-
target = target.$parent;
13156-
}
1315713147
this.onTouchBegin(event);
1315813148
};
1315913149
/**
@@ -13248,8 +13238,9 @@ var eui;
1324813238
values[9 /* touchScrollV */].start(event.$stageY);
1324913239
}
1325013240
var stage = this.$stage;
13251-
stage.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
13252-
stage.addEventListener(egret.TouchEvent.TOUCH_END, this.onTouchEnd, this);
13241+
this.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
13242+
stage.addEventListener(egret.TouchEvent.TOUCH_END, this.onTouchEnd, this, true);
13243+
this.addEventListener(egret.TouchEvent.TOUCH_CANCEL, this.onTouchCancel, this);
1325313244
this.addEventListener(egret.Event.REMOVED_FROM_STAGE, this.onRemoveListeners, this);
1325413245
};
1325513246
/**
@@ -13258,15 +13249,35 @@ var eui;
1325813249
* @param event
1325913250
*/
1326013251
p.onTouchMove = function (event) {
13252+
if (event.isDefaultPrevented()) {
13253+
return;
13254+
}
1326113255
var values = this.$Scroller;
1326213256
if (!values[5 /* touchMoved */]) {
13263-
if (Math.abs(values[3 /* touchStartX */] - event.$stageX) < Scroller.scrollThreshold &&
13264-
Math.abs(values[4 /* touchStartY */] - event.$stageY) < Scroller.scrollThreshold) {
13257+
if (Math.abs(values[3 /* touchStartX */] - event.$stageX) < Scroller.scrollThreshold) {
13258+
var outX = false;
13259+
}
13260+
else {
13261+
outX = true;
13262+
}
13263+
if (Math.abs(values[4 /* touchStartY */] - event.$stageY) < Scroller.scrollThreshold) {
13264+
var outY = false;
13265+
}
13266+
else {
13267+
outY = true;
13268+
}
13269+
if (!outX && !outY) {
13270+
return;
13271+
}
13272+
if (outX && values[1 /* scrollPolicyH */] == 'off') {
13273+
return;
13274+
}
13275+
if (outY && values[0 /* scrollPolicyV */] == 'off') {
1326513276
return;
1326613277
}
1326713278
values[12 /* touchCancle */] = true;
13268-
this.dispatchCancelEvent(event);
1326913279
values[5 /* touchMoved */] = true;
13280+
this.dispatchCancelEvent(event);
1327013281
var horizontalBar = this.horizontalScrollBar;
1327113282
var verticalBar = this.verticalScrollBar;
1327213283
if (horizontalBar && horizontalBar.autoVisibility && values[6 /* horizontalCanScroll */]) {
@@ -13279,7 +13290,9 @@ var eui;
1327913290
values[2 /* autoHideTimer */].reset();
1328013291
}
1328113292
eui.UIEvent.dispatchUIEvent(this, eui.UIEvent.CHANGE_START);
13293+
this.$stage.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
1328213294
}
13295+
event.preventDefault();
1328313296
var viewport = values[10 /* viewport */];
1328413297
var uiValues = viewport.$UIComponent;
1328513298
if (values[6 /* horizontalCanScroll */]) {
@@ -13289,6 +13302,15 @@ var eui;
1328913302
values[9 /* touchScrollV */].update(event.$stageY, viewport.contentHeight - uiValues[11 /* height */], viewport.scrollV);
1329013303
}
1329113304
};
13305+
/**
13306+
* @private
13307+
* @param event
13308+
*/
13309+
p.onTouchCancel = function (event) {
13310+
if (!this.$Scroller[5 /* touchMoved */]) {
13311+
this.onRemoveListeners();
13312+
}
13313+
};
1329213314
/**
1329313315
* @private
1329413316
* @param event
@@ -13337,8 +13359,10 @@ var eui;
1333713359
*/
1333813360
p.onRemoveListeners = function () {
1333913361
var stage = this.$stage;
13362+
this.removeEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
13363+
stage.removeEventListener(egret.TouchEvent.TOUCH_END, this.onTouchEnd, this, true);
1334013364
stage.removeEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
13341-
stage.removeEventListener(egret.TouchEvent.TOUCH_END, this.onTouchEnd, this);
13365+
this.removeEventListener(egret.TouchEvent.TOUCH_CANCEL, this.onTouchCancel, true);
1334213366
this.removeEventListener(egret.Event.REMOVED_FROM_STAGE, this.onRemoveListeners, this);
1334313367
};
1334413368
/**

build/eui/eui.min.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/extension/eui/components/Scroller.ts

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -507,17 +507,6 @@ module eui {
507507
if (!canScroll) {
508508
return;
509509
}
510-
511-
var target:egret.DisplayObject = event.target;
512-
while (target && target != this) {
513-
if (target instanceof Scroller) {
514-
canScroll = (<Scroller><any> target).checkScrollPolicy();
515-
if (canScroll) {
516-
return;
517-
}
518-
}
519-
target = target.$parent;
520-
}
521510
this.onTouchBegin(event);
522511
}
523512
/**
@@ -621,8 +610,9 @@ module eui {
621610
values[Keys.touchScrollV].start(event.$stageY);
622611
}
623612
var stage = this.$stage;
624-
stage.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
613+
this.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
625614
stage.addEventListener(egret.TouchEvent.TOUCH_END, this.onTouchEnd, this, true);
615+
this.addEventListener(egret.TouchEvent.TOUCH_CANCEL,this.onTouchCancel,this);
626616
this.addEventListener(egret.Event.REMOVED_FROM_STAGE, this.onRemoveListeners, this);
627617
}
628618

@@ -632,17 +622,35 @@ module eui {
632622
* @param event
633623
*/
634624
private onTouchMove(event:egret.TouchEvent):void {
625+
if (event.isDefaultPrevented()) {
626+
return;
627+
}
635628
var values = this.$Scroller;
636629
if (!values[Keys.touchMoved]) {
637-
if (Math.abs(values[Keys.touchStartX] - event.$stageX) < Scroller.scrollThreshold &&
638-
Math.abs(values[Keys.touchStartY] - event.$stageY) < Scroller.scrollThreshold) {
630+
if(Math.abs(values[Keys.touchStartX] - event.$stageX) < Scroller.scrollThreshold){
631+
var outX = false;
632+
}else{
633+
outX = true;
634+
}
635+
if(Math.abs(values[Keys.touchStartY] - event.$stageY) < Scroller.scrollThreshold){
636+
var outY = false;
637+
}else{
638+
outY = true;
639+
}
640+
if(!outX && !outY){
641+
return;
642+
}
643+
if(outX && values[Keys.scrollPolicyH] == 'off'){
644+
return;
645+
}
646+
if(outY && values[Keys.scrollPolicyV] == 'off') {
639647
return;
640648
}
641649

642650
values[Keys.touchCancle] = true;
651+
values[Keys.touchMoved] = true;
643652
this.dispatchCancelEvent(event);
644653

645-
values[Keys.touchMoved] = true;
646654
var horizontalBar = this.horizontalScrollBar;
647655
var verticalBar = this.verticalScrollBar;
648656
if (horizontalBar && horizontalBar.autoVisibility && values[Keys.horizontalCanScroll]) {
@@ -655,8 +663,11 @@ module eui {
655663
values[Keys.autoHideTimer].reset();
656664
}
657665
UIEvent.dispatchUIEvent(this, UIEvent.CHANGE_START);
666+
this.$stage.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
658667
}
659668

669+
event.preventDefault();
670+
660671
var viewport = values[Keys.viewport];
661672
var uiValues = viewport.$UIComponent;
662673
if (values[Keys.horizontalCanScroll]) {
@@ -666,6 +677,15 @@ module eui {
666677
values[Keys.touchScrollV].update(event.$stageY, viewport.contentHeight - uiValues[sys.UIKeys.height], viewport.scrollV);
667678
}
668679
}
680+
/**
681+
* @private
682+
* @param event
683+
*/
684+
private onTouchCancel(event:egret.TouchEvent):void{
685+
if(!this.$Scroller[Keys.touchMoved]){
686+
this.onRemoveListeners();
687+
}
688+
}
669689
/**
670690
* @private
671691
* @param event
@@ -719,8 +739,10 @@ module eui {
719739
*/
720740
private onRemoveListeners():void {
721741
var stage = this.$stage;
722-
stage.removeEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
742+
this.removeEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
723743
stage.removeEventListener(egret.TouchEvent.TOUCH_END, this.onTouchEnd, this, true);
744+
stage.removeEventListener(egret.TouchEvent.TOUCH_MOVE, this.onTouchMove, this);
745+
this.removeEventListener(egret.TouchEvent.TOUCH_CANCEL,this.onTouchCancel, true);
724746
this.removeEventListener(egret.Event.REMOVED_FROM_STAGE, this.onRemoveListeners, this);
725747
}
726748

0 commit comments

Comments
 (0)