ผมมีรายการที่มีoverflow-x
และกำหนดให้overflow-y
นอกจากนี้ผมได้ตั้งค่าเลื่อนโมเมนตัมเพื่อเลื่อนสัมผัสการทำงานมีความสุขในมือถือใช้auto
webkit-overflow-scrolling: true
อย่างไรก็ตามปัญหาคือฉันไม่สามารถหาวิธีปิดการใช้งานการเลื่อนแนวนอนเมื่อเลื่อนในแนวตั้ง มันนำไปสู่ประสบการณ์การใช้งานที่ไม่ดีนักเนื่องจากการปัดไปทางซ้ายบนหรือขวาบนจะทำให้ตารางเลื่อนตามแนวทแยงมุม เมื่อผู้ใช้เลื่อนแนวตั้งฉันไม่ต้องการเลื่อนในแนวนอนอย่างแน่นอนจนกว่าผู้ใช้จะหยุดเลื่อนแนวตั้ง
ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:
JS:
offsetX: number;
offsetY: number;
isScrollingHorizontally = false;
isScrollingVertically = false;
//Detect the scrolling events
ngOnInit() {
this.scrollListener = this.renderer.listen(
this.taskRows.nativeElement,
'scroll',
evt => {
this.didScroll();
}
);
fromEvent(this.taskRows.nativeElement, 'scroll')
.pipe(
debounceTime(100),
takeUntil(this.destroy$)
)
.subscribe(() => {
this.endScroll();
});
}
didScroll() {
if ((this.taskRows.nativeElement.scrollLeft != this.offsetX) && (!this.isScrollingHorizontally)){
console.log("Scrolling horizontally")
this.isScrollingHorizontally = true;
this.isScrollingVertically = false;
this.changeDetectorRef.markForCheck();
}else if ((this.taskRows.nativeElement.scrollTop != this.offsetY) && (!this.isScrollingVertically)) {
console.log("Scrolling Vertically")
this.isScrollingHorizontally = false;
this.isScrollingVertically = true;
this.changeDetectorRef.markForCheck();
}
}
endScroll() {
console.log("Ended scroll")
this.isScrollingVertically = false;
this.isScrollingHorizontally = false;
this.changeDetectorRef.markForCheck();
}
HTML:
<div
class="cu-dashboard-table__scroll"
[class.cu-dashboard-table__scroll_disable-x]="isScrollingVertically"
[class.cu-dashboard-table__scroll_disable-y]="isScrollingHorizontally"
>
CSS:
&__scroll {
display: flex;
width: 100%;
height: 100%;
overflow-y: auto;
overflow-x: auto;
will-change: transform;
-webkit-overflow-scrolling: touch;
&_disable-x {
overflow-x: hidden;
}
&_disable-y {
overflow-y: hidden;
}
}
แต่ทุกครั้งที่เราได้ตั้งไว้overflow-x
หรือoverflow-y
ไปhidden
เมื่อมันได้รับการเลื่อนเลื่อนจะ glitch และกระโดดกลับไปด้านบน ฉันยังสังเกตเห็นด้วยว่าwebkit-overflow-scrolling: true
นี่คือเหตุผลที่สิ่งนี้เกิดขึ้นเมื่อฉันลบออกพฤติกรรมดูเหมือนจะหยุดทำงาน แต่ฉันต้องการสิ่งนี้เพื่อเลื่อนโมเมนตัมในอุปกรณ์มือถือ
ฉันจะปิดการใช้งานการเลื่อนแนวนอนเมื่อเลื่อนในแนวตั้งได้อย่างไร