Tengo una lista, con el overflow-x
y overflow-y
establecido en auto
. Además, he configurado el desplazamiento de impulso, por lo que el desplazamiento táctil funciona bien en dispositivos móviles webkit-overflow-scrolling: true
.
El problema, sin embargo, es que no puedo entender cómo deshabilitar el desplazamiento horizontal al desplazarme verticalmente. Conduce a una experiencia de usuario realmente mala, ya que deslizar hacia la parte superior izquierda o superior derecha hará que la tabla se desplace en diagonal. Cuando el usuario se desplaza verticalmente, absolutamente NO deseo ningún desplazamiento horizontal hasta que el usuario haya dejado de desplazarse verticalmente.
He intentado lo siguiente:
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;
}
}
Pero el conjunto que cada vez overflow-x
o overflow-y
para hidden
cuando su ha desplazado, el desplazamiento será glitch y saltar de nuevo a la parte superior. También he notado que esa webkit-overflow-scrolling: true
es la razón por la cual esto ocurre, cuando lo elimino, el comportamiento parece detenerse, pero lo necesito absolutamente para el desplazamiento de impulso en los dispositivos móviles.
¿Cómo desactivo el desplazamiento horizontal cuando me desplazo verticalmente?