Birlikte, bir liste var overflow-x
ve overflow-y
set için auto
. Buna ek olarak, momentum kaydırma ayarladım, bu yüzden dokunmatik kaydırma mobilde güzel çalışıyor webkit-overflow-scrolling: true
.
Ancak sorun, dikey kaydırırken yatay kaydırmanın nasıl devre dışı bırakılacağını anlayamıyorum. Sol üst veya sağ üst tarafa doğru kaydırmak tablonun çapraz olarak kaymasına neden olacağından, gerçekten kötü bir kullanıcı deneyimine yol açar. Kullanıcı dikey olarak kaydırırken, kullanıcı dikey olarak kaydırmayı durdurana kadar yatay olarak herhangi bir kaydırma istemiyorum.
Aşağıdakileri denedim:
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;
}
}
Ama ne seti overflow-x
ya overflow-y
hiç hidden
onun kaydırıldığını zaman, aksaklık ve üstüne geri atlar kaydırma. Ayrıca webkit-overflow-scrolling: true
, bunun neden olduğunu fark ettim, kaldırdığımda, davranış duruyor gibi görünüyor, ama kesinlikle mobil cihazlarda momentum kaydırma için buna ihtiyacım var.
Dikey kaydırırken yatay kaydırmayı nasıl devre dışı bırakabilirim?