回答編集履歴

1

コメントを受けて、より詳細に回答

2020/08/20 01:56

投稿

miyabi_pudding
miyabi_pudding

スコア9528

test CHANGED
@@ -12,6 +12,102 @@
12
12
 
13
13
 
14
14
 
15
+ コメントを受けまして、考え方と、例示をします。
16
+
17
+ `home`かどうかを、クラスプロパティとして、保持し、それをもって、
18
+
19
+ **スクロール20px以内時のクラス名を動的に変更**とすればいいかと。
20
+
21
+ 下記構文でいかがでしょうか。
22
+
23
+
24
+
25
+ ```typescript
26
+
27
+ // 上部構文は省略
28
+
29
+
30
+
31
+ export class HeaderComponent implements OnInit {
32
+
33
+ public navbarStyle = 'hidden';
34
+
35
+ // ホームかどうかをbooleanで保持するためのプロパティ
36
+
37
+ private homeFlg = true;
38
+
39
+
40
+
41
+ constructor(
42
+
43
+ private router: Router
44
+
45
+ ) { }
46
+
47
+
48
+
49
+ ngOnInit() {
50
+
51
+ this.router.events.forEach((event: NavigationEvent) => {
52
+
53
+ // ページ遷移後の処理
54
+
55
+ if (event instanceof NavigationEnd) {
56
+
57
+ if (event.urlAfterRedirects.includes(Constant.rpContact)) {
58
+
59
+ this.navbarStyle = 'not-home';
60
+
61
+ this.homeFlg = false;
62
+
63
+ } else {
64
+
65
+ this.homeFlg = true;
66
+
67
+ }
68
+
69
+ }
70
+
71
+ });
72
+
73
+ }
74
+
75
+
76
+
77
+ @HostListener('window:scroll', [])
78
+
79
+ onWindowScroll() {
80
+
81
+ if (window.pageYOffset > 20) {
82
+
83
+ this.navbarStyle = 'fixed';
84
+
85
+ } else {
86
+
87
+ this.navbarStyle = this.homeFlg ? '' : 'not-home';
88
+
89
+ }
90
+
91
+ }
92
+
93
+ }
94
+
95
+ ```
96
+
97
+
98
+
99
+ つまりは、`home`かどうかを保持しておき、その真偽によって、当てるクラス文字列を変える、という感じです。
100
+
101
+ あとは、もし条件を増やしたいとなれば、
102
+
103
+ `ngOnInit`メソッド中にて、`switch`構文によって、条件を入れ替えたり、すればいいかと。
104
+
105
+
106
+
107
+ ---- 以下元構文回答 ----
108
+
109
+
110
+
15
111
  `onWindowScroll`の処理中の、
16
112
 
17
113
  `this.navbarStyle = '';`を