[解決済み] Angular 5 Routeクリック毎にトップにスクロールする。
質問
Angular5を使用しています。ダッシュボードには、小さなコンテンツのセクションと大きなコンテンツのセクションがあり、ルーターを変更する際に問題が発生しました。私はトップに移動するために毎回スクロールする必要があります。
ルーターを変更しても、常に一番上に表示されるようにするには、どうすればよいでしょうか。
解決方法は?
いくつかの解決策がありますので、すべて確認してください :)
オプション1:
ルーターコンセントから発せられる
activate
イベントは、新しいコンポーネントがインスタンス化されるたびに発生します。
(activate)
を使えば、(例えば)一番上までスクロールすることができます。
app.component.html
<router-outlet (activate)="onActivate($event)"></router-outlet>
app.component.ts
onActivate(event) {
// window.scroll(0,0);
window.scroll({
top: 0,
left: 0,
behavior: 'smooth'
});
//or document.body.scrollTop = 0;
//or document.querySelector('body').scrollTo(0,0)
...
}
Safariではスムーススクロールがうまく実装されていないため、例えば以下のように使用します。 この解決策 を使用すると、スムーズにスクロールすることができます。
onActivate(event) {
let scrollToTop = window.setInterval(() => {
let pos = window.pageYOffset;
if (pos > 0) {
window.scrollTo(0, pos - 20); // how far to scroll on each step
} else {
window.clearInterval(scrollToTop);
}
}, 16);
}
すべてのコンポーネントがスクロールを開始するわけではない、というように選択的でありたい場合、そのチェックは
if
のように記述します。
onActivate(e) {
if (e.constructor.name)==="login"{ // for example
window.scroll(0,0);
}
}
Option2:
Angular6.1以降では、この他に
{ scrollPositionRestoration: 'enabled' }
を実行すると、すべてのルートに適用されます。
RouterModule.forRoot(appRoutes, { scrollPositionRestoration: 'enabled' })
スムーススクロールもやってくれるよ、もう。しかし、これはすべてのルーティングでそれを行うための不便さを持っています。
オプション3:
もう一つの解決策は、ルーターアニメーションでトップスクロールを行うことです。これは、上部にスクロールさせたいすべてのトランジションに追加します。
query(':enter, :leave', style({ position: 'fixed' }), { optional: true })
関連
-
[解決済み】SyntaxError: 'import' と 'export' は 'sourceType: module' とだけ表示されるかもしれない - Gulp
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] JavaScriptでページの一番上までスクロールする?
-
[解決済み] angular-routeとangular-ui-routerの違いは何ですか?
-
[解決済み] Angularプロジェクトごとに生成される膨大な数のファイル
-
[解決済み] AngularJS : なぜangularでは{{}}よりもng-bindが良いのですか?
-
[解決済み] Angularのルーティングされたコンポーネントにデータを渡すにはどうしたらいいですか?
-
[解決済み] ある要素にスクロールするには?
-
[解決済み】Angular 2 ルート変更時に上部にスクロールさせる
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】 \u003C とは何ですか?
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み] JavaScriptでページの一番上までスクロールする?
-
[解決済み】Angular 2 ルート変更時に上部にスクロールさせる