1
1
import { ChangeDetectionStrategy , Component , OnInit } from '@angular/core' ;
2
2
import { Meta , Title } from '@angular/platform-browser' ;
3
3
import { ActivatedRoute , NavigationEnd , Router } from '@angular/router' ;
4
+ import { ViewportScroller } from '@angular/common' ;
4
5
import { filter } from 'rxjs/operators' ;
5
6
import { HOMEPAGE_TITLE , TITLE_SUFFIX } from './constants' ;
6
7
@@ -17,6 +18,7 @@ export class AppComponent implements OnInit {
17
18
private readonly metaService : Meta ,
18
19
private readonly router : Router ,
19
20
private readonly activatedRoute : ActivatedRoute ,
21
+ private readonly viewportScroller : ViewportScroller ,
20
22
) { }
21
23
22
24
async ngOnInit ( ) {
@@ -25,6 +27,7 @@ export class AppComponent implements OnInit {
25
27
. subscribe ( ( ev : NavigationEnd ) => {
26
28
this . updateTitle ( ) ;
27
29
this . updateMeta ( ev ) ;
30
+ this . handleFragmentScroll ( ev ) ;
28
31
} ) ;
29
32
}
30
33
@@ -58,4 +61,20 @@ export class AppComponent implements OnInit {
58
61
this . robotsElement = undefined ;
59
62
}
60
63
}
64
+
65
+ private handleFragmentScroll ( event : NavigationEnd ) {
66
+ const fragment = event . url . split ( '#' ) [ 1 ] ;
67
+ if ( fragment ) {
68
+ setTimeout ( ( ) => {
69
+ const element = document . getElementById ( fragment ) ;
70
+ if ( element ) {
71
+ const offsetTop = element . offsetTop - 100 ;
72
+ window . scrollTo ( {
73
+ top : offsetTop ,
74
+ behavior : 'smooth'
75
+ } ) ;
76
+ }
77
+ } , 100 ) ;
78
+ }
79
+ }
61
80
}
0 commit comments