Full-Screen Section to Fixed Header

scroll-driven animations を JavaScript でやる

このページでは、全画面に拡がったタイトル文字をスクロールさせると、上部にヘッダーを表示して、その中に文字を縮小して収めるというものだ。

html の構造は、全てを排除して最小限の構造にしている。例えば、ヘッダーにはサイトのロゴ、主要なリンクが入るのだが、それを排除してシンプルにしてある。

この一連のページでは、JavaScript の構造は変えないで、全て同じ内容を使っていく。

JavaScript でスクロールの位置を求め、スクロールの現在位置に応じて <body> の「class」を付けたり、外したりしてヘッダー要素の表示状態を切り替える。最上位へスクロールするとヘッダーが隠れる、下方向へスクロールするとヘッダーが現れて、ナビゲーションを利用できる。

html

<body>
  <section class="first">
  <h1>Full-Screen Section to Fixed Header</h1>
</section>
  
  <section class="second">
  <!-- content -->
  </section>
</body>

JavaScript

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>

CSS

初期起動画面のフルスクリーン画像(.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