1
- import { Component , OnInit , OnDestroy , inject , Inject } from "@angular/core" ;
1
+ import { Component , OnInit , OnDestroy , inject , Inject , HostListener } from "@angular/core" ;
2
2
import { RouterOutlet } from "@angular/router" ;
3
- import { Subscription , fromEvent } from "rxjs" ;
3
+ import { Subscription } from "rxjs" ;
4
4
import { BlogInfo } from "./models/blog-info" ;
5
5
import { BlogService } from "./services/blog.service" ;
6
6
import { ThemeService } from "./services/theme.service" ;
@@ -12,7 +12,7 @@ import { ButtonModule } from "primeng/button";
12
12
@Component ( {
13
13
selector : "app-root" ,
14
14
standalone : true ,
15
- imports : [ RouterOutlet , HeaderComponent , FooterComponent , ButtonModule ] ,
15
+ imports : [ RouterOutlet , HeaderComponent , FooterComponent , ButtonModule ] ,
16
16
templateUrl : "./app.component.html" ,
17
17
styleUrl : "./app.component.scss" ,
18
18
} )
@@ -24,11 +24,10 @@ export class AppComponent implements OnInit, OnDestroy {
24
24
themeService : ThemeService = inject ( ThemeService ) ;
25
25
blogService : BlogService = inject ( BlogService ) ;
26
26
private querySubscription ?: Subscription ;
27
- private scrollEvntSub ?: Subscription ;
28
- enableScrollUp : boolean = false ;
27
+ showScrollButton : boolean = false ;
29
28
private readonly scroller = inject ( ViewportScroller ) ;
30
29
31
- constructor ( @Inject ( DOCUMENT ) private document : Document ) { }
30
+ constructor ( @Inject ( DOCUMENT ) private document : Document ) { }
32
31
33
32
ngOnInit ( ) : void {
34
33
this . blogURL = this . blogService . getBlogURL ( ) ;
@@ -54,30 +53,23 @@ export class AppComponent implements OnInit, OnDestroy {
54
53
} ) ;
55
54
}
56
55
} ) ;
57
-
58
- this . scrollEvntSub = fromEvent ( this . document , 'scroll' )
59
- . subscribe ( ( ) => {
60
- if ( this . calculatePositionScroll ( ) > 50 )
61
- this . enableScrollUp = true ;
62
- else
63
- this . enableScrollUp = false ;
64
- } )
65
56
}
66
57
67
- goPageTop ( ) {
68
- this . scroller . scrollToPosition ( [ 0 , 0 ] ) ;
58
+ @HostListener ( 'window:scroll' , [ ] )
59
+ onWindowScroll ( ) {
60
+ const yOffset = window . pageYOffset || document . documentElement . scrollTop ;
61
+ if ( yOffset > 300 ) {
62
+ this . showScrollButton = true ;
63
+ } else {
64
+ this . showScrollButton = false ;
65
+ }
69
66
}
70
67
71
- calculatePositionScroll ( ) : number {
72
- var scrollTop = this . document . documentElement . scrollTop ;
73
- var docHeight = this . document . documentElement . scrollHeight ;
74
- var winHeight = this . document . documentElement . clientHeight ;
75
- var scrollPercent = ( scrollTop ) / ( docHeight - winHeight ) ;
76
- return Math . round ( scrollPercent * 100 ) ;
68
+ scrollToTop ( ) {
69
+ this . scroller . scrollToPosition ( [ 0 , 0 ] ) ;
77
70
}
78
71
79
72
ngOnDestroy ( ) : void {
80
- this . scrollEvntSub ?. unsubscribe ( ) ;
81
73
this . querySubscription ?. unsubscribe ( ) ;
82
74
}
83
75
}
0 commit comments