Первоначальное центрирование содержимого осуществляется с помощью эффекта в конструкторе:
Код: Выделить всё
element = viewChild.required('my-container');
#scrollTo = computed(() => {
const nativeElement = this.element().nativeElement;
const scrollHeight: number = nativeElement.scrollHeight;
const offsetHeight: number = nativeElement.offsetHeight;
return 4 + (scrollHeight - offsetHeight) / 2;
});
constructor() {
effect(() =>
this.element().nativeElement.scrollTo(0, this.#scrollTo())
);
}
Как вы могли догадаться, жесткое программирование значения прокрутки не решает проблему (и это также не является жизнеспособным решением).
Я предполагаю, что это гонка -условие между расчетом макета Chrome и ScrollTo расчет сигнала? Есть идеи, как исправить этот расчет и/или поведение, не внося задержку в конструктор компонента?
Как отметил Нарен Мурали во второй части своего ответьте, задержка решит проблему; со следующим я не видел неудачного центрирования более чем в пятидесяти обновлениях:
Код: Выделить всё
constructor() {
effect(() =>
setTimeout(() =>
this.element().nativeElement.scrollTo(0, this.#scrollTo()),
200
)
);
}
https://github.com/angular/angular/issues/59426
Подробнее здесь: https://stackoverflow.com/questions/793 ... out-quirks
Мобильная версия