В моем приложении я использую компонент выбора материала.
Ожидаемое поведение, которого я хочу достичь: когда я открываю поле селектора, которое ограничено селектором, оно должно прокручиваться до верхней части области просмотра, а параметры должны отображаться под ним.
Демо : https://stackblitz.com/edit/angular-g6s73z
Я обнаружил проблему, заключающуюся в том, что когда селектор находится ближе к нижней части опций области просмотра, он выходит за пределы экрана.
Выпуск : https://streamable.com/r3ekd
Я не могу найти способ это исправить. Я попытался реализовать свою собственную стратегию прокрутки, в которой я использовал scrollIntoView
, а затем вручную переставил панель выбора, когда она переполняла содержимое. Это было глючит на Android и iOS, поэтому я отказался от этой идеи.
У кого-нибудь была подобная проблема? Как решить эту проблему? Может быть, я что-то пропустил?
Пользовательская стратегия прокрутки
enable() {
setTimeout(() => {
document.querySelector('#field').scrollIntoView({behavior: 'smooth'});
this.scrollDispatcher.scrolled().subscribe(() => {
this.overlayRef.updatePosition();
});
this.scrollDispatcher.scrolled().pipe(debounceTime(50), take(1)).subscribe(() => {
if (parseFloat(this.overlayRef.hostElement.style.top) <= 0) {
this.overlayRef.overlayElement.style.top = coerceCssPixelValue(12);
}
});
this.overlayRef.updatePosition();
disablePageScroll();
}