ページ内リンクをページ外からでもスムーズにスクロール

縦長のランディングページなんかを作る場合、グローバルナビゲーションはページ内リンクにして、スムーズにスクロールさせるパターンがよくあります。

ですが、特定のページを別ページにしている場合、ページの外からページ内リンクをクリックした際もスムーズにスクロールさせたいものです。

ですので今回は、ページ内リンクをページ外からクリックした際のスムーズスクロールをやっていきます。

まずはページ内リンクをスムーズスクロールさせる

HTMLは全部載せると長くなるので、ナビゲーションのみ載せます。いたって普通のページ内リンクです。

 

1行目

今回はヘッダーを固定してますので、ヘッダーの高さを取得して、スクロールする際にヘッダーの高さ分をマイナスします。

2行目

「a[href^=”#”]’)」で#から始まるリンク要素をクリックした際の処理を記述します。

5行目

前述のとおり、スクロール先の高さからヘッダーの高さをマイナスします。

スムーズスクロールじゃないページ外からのページ内リンク

別ページでお問い合わせページを追加しました。グローバルメニューをクリックしてみてください。

ページ外からのページ内リンクなので、スムーズスクロールではなくダイレクトにその位置へスクロールしまいます。ヘッダーの高さ分マイナスもされなくなってしまいました。

スムーズスクロールのページ外からのページ内リンク

11行目以降のリンクをクリックした際の処理はサンプル1と同じです。

2行目

ページ外からリンクしてきた際、URLのハッシュを取得します。

4行目

URLにハッシュがある場合=ページ外からのページ内リンクの場合はダイレクトにその位置へスクロールしてしまうので、一旦スクロールをトップに戻します。

5行目

そして、トップから改めてスクロールさせますが、この際、ページロードの処理を待ってからでないと正常にスクロールできませんので、100ミリ秒後にスクロールさせます。

まとめ

よくページ内リンクをハッシュではなく「?=○○」としているサンプルを見ますが、トリッキーなやり方に思えてしまうので、通常どおりページ内リンクは「#○○」でやりました。

サンプルのようにランディングページでお問い合わせフォームだけ別ページにしている場合に役立ちますので、やってみてください。

当サイトの自治会、町内会に関する内容の掲載は「お問い合わせ」ページの専用フォームよりお気軽にお寄せ下さい。

※自治会、町内会の情報掲載は全て無料で提供しております。

お問い合わせ