aタグを使ってHTMLでページ内リンクをスムーズスクロールさせる
はじめに
タイトルについて記事にしました。
この記事で得る内容は以下の通りです。
・ HTML及び、JavaScriptの知識が増える
・ a要素を使ってHTMLでページ内リンクをスムーズスクロールさせる方法
例
下記の様に、ヘッダーに各コンテンツのリンク先を掲載する場合です。
haml
リンク先にidを割り振ります。
.container-top#HOME
.container-profile#ABOUT
.container-skill#SKILLS
.container-works#WORKS
.container-contact#CONTACT
ヘッダーのa要素に、href属性で先ほど割り振った各リンク先のidを書きます。
.header
%a(href="#HOME") HOME
%a(href="#ABOUT") ABOUT
%a(href="#TEXT") TEXT
%a(href="#WORKS") WORKS
%a(href="#CONTACT") CONTACT
これでaタグをクリックすると、割り当てたリンク先にスクロールしますが
瞬時にスクロールしてしまい、あまり面白みがない様に感じます。
スムーズスクロールさせるには、CSSを使うか、JavaScriptを使う2種類の方法があります。
html要素にscroll-behavior: smooth;を適用する
導入がとても簡単ですが、ページ内リンクが全てスムーズスクロールになってしまい、スクロール速度の微調整ができません。
html {
scroll-behavior: smooth;
}
JavaScriptでスムーズスクロールさせる
先程のhamlのa要素にクラスsmoothScrollを付与します。
.header
%a.smoothScroll(href="#HOME") HOME
%a.smoothScroll(href="#ABOUT") ABOUT
%a.smoothScroll(href="#TEXT") TEXT
%a.smoothScroll(href="#WORKS") WORKS
%a.smoothScroll(href="#CONTACT") CONTACT
クラスsmoothScrollがあるか判定し、ない場合は処理を中断します。
document.addEventListener("click", (e) => {
const target = e.target;
if (!target.classList.contains("smoothScroll")) return;
e.preventDefault();
const targetId = target.hash;
document.querySelector(targetId).scrollIntoView({
behavior: "smooth",
block: "start",
});
});
参考:どちらの方法も対応ブラウザがchromeとFirefoxにほぼ限られてしまう点には注意とのことです。
Author And Source
この問題について(aタグを使ってHTMLでページ内リンクをスムーズスクロールさせる), 我々は、より多くの情報をここで見つけました https://qiita.com/s79ns/items/3fbbf868685dc00ee2f7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .