このページでは、全画面に拡がったタイトル文字をスクロールさせると、上部にヘッダーを表示して、その中に文字を縮小して収めるというものだ。
html の構造は、全てを排除して最小限の構造にしている。例えば、ヘッダーにはサイトのロゴ、主要なリンクが入るのだが、それを排除してシンプルにしてある。
この一連のページでは、JavaScript の構造は変えないで、全て同じ内容を使っていく。
JavaScript でスクロールの位置を求め、スクロールの現在位置に応じて <body> の「class」を付けたり、外したりしてヘッダー要素の表示状態を切り替える。最上位へスクロールするとヘッダーが隠れる、下方向へスクロールするとヘッダーが現れて、ナビゲーションを利用できる。
<body>
<section class="first">
<h1>Full-Screen Section to Fixed Header</h1>
</section>
<section class="second">
<!-- content -->
</section>
</body>
JavaScript の内容は、現在のスクロール位置を求めて > 0 であるなら、「class="is-sticky"」を付け加えて CSS を反映させる。そうでなければ、「class="is-sticky"」を削除する。
<script>
const body = document.body; //<body>へのアクセスを行う
const toggleClass = "is-sticky";
//toggleClass を is-sticky に宣言する
window.addEventListener("scroll", () => {
//addEventListenerメソッドを使ってscrollイベントを登録する時の書き方
const currentScroll = window.pageYOffset;
//Web 文書が垂直方向にどれだけスクロールされたかをピクセル単位で返すプロパティ
//currentScroll は、現在のスクロール位置(単位:ピクセル)を表す変数
if (currentScroll > 0) {
body.classList.add(toggleClass);
//body に追加したい先の要素 toggleClass を付け加える
//window.pageYOffset は、Window のプロパティで、ブラウザの上端を基準とした縦方向のページのスクロール量を返す
} else {
body.classList.remove(toggleClass);
//toggleClass を取り除く
}
});
</script>
初期起動画面のフルスクリーン画像(.is-sticky 無し)
スクロールしてフルスクリーンからヘッダーの画面になった状態(.is-sticky 有り)
JavaScript で、「class="is-sticky"」を付け加えたときの CSS の内容。
.is-sticky::before {
content: "";
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 70px;
box-shadow: 0 10px 15px rgba(0, 0, 0, 0.4);
}
.is-sticky .first {
height: 70px;
background-color: var(--grand_bleu);
}
.is-sticky .first h1 {
font-size: 1em;
font-weight: 100;
}
.is-sticky .second {
padding-top: calc(var(--sticky-header-height) + 10vh);
}
© zycopower,Are U experienced?
Scroll Down