За последние два дня я копался в Интернете о прокрутке фрагмента в поле зрения с помощью angular.
Допустим, у нас есть статическая веб-страница с набором идентификаторов, которые действуют как фрагменты. И имеет боковую навигационную панель для навигации по фрагментам со ссылками.
Я попробовал Router anchorScroll, просто добавив это для модуля ничего не делает для меня. Он просто дает вам фрагмент в URL-адресе, но без прокрутки.
Я пробовал viewportScroller. Основная проблема в том, что это не работает в первый раз (например: вы перенаправлены на эту статическую страницу с нужным фрагментом, но прокрутка не происходит, если вы были на этой же странице и повторяете процесс , это работает, если вы нажмете на ссылку на боковой панели навигации, которая имеет тот же URL-адрес, что и вы посещаете: ([foo]/[bar]#[fragment])
она также не работает, поскольку навигация не изменилась.
дополнительные параметры, используемые для маршрутизатора:
const routerOptions: ExtraOptions = {
useHash: false,
anchorScrolling: 'enabled',
scrollPositionRestoration: 'enabled',
onSameUrlNavigation: 'reload'
};
ps: useHash: true ничего не меняет.
viewportScroller внутри ngOnInit:
this.viewportScroller.setOffset([0, 64]);
this.viewportScroller.setHistoryScrollRestoration('auto');
this.router.events.pipe(filter(element => element instanceof Scroll)).subscribe((element: any) => {
console.log(element)
this.viewportScroller.scrollToAnchor(element.anchor);
});
Как проще всего прокрутить до фрагмента БЕЗ!!! используя это:
ngOnInit() {
this.route.fragment.subscribe((fragment: string) => {
if (fragment && document.getElementById(fragment) != null) {
document.getElementById(fragment).scrollIntoView({ behavior: "smooth" });
}
});
}
b/c с этим работает каждый раз, но это не TS, так как мы используем TS в проектах нашей компании.
Помогите мне пожалуйста