Full-Screen Section to Fixed Header

scroll-driven animations を JavaScript でやる

CSS の animation-timeline プロパティに指定する scroll() と view() は、どちらもアニメーションとスクロールを連動させる関数である。

scroll() はスクロール量に応じてアニメーションを進行させることができる。スクロールの進行状況は 0% から 100% の範囲で表され、下にスクロールすることで進行状況が 100% に近づく。

view() は、アニメーションするビュー進行タイムラインを提供する主体要素を示す。ビュー進行タイムラインは、最も近い先祖スクロール内の主体要素の可視性の変化によって進行する。たとえば、ブロック軸上のスクローラーと交差する要素にアニメーションをバインドするには view(block) を使用する。

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

html

<body>
  <section class="first">
    <h1>Full-Screen Section to Fixed Header</h1>
    <header class="page-header">
      
      <nav class="nav">
      <div class="inner">
        <a href="http://zyco.jp" class="logo-wrapper">
          <img width="40" height="40" src="images/logo.png" alt="zyco logo">
        </a>
        <nav class="header-nav">
        <ul class="header-nav-list">
          <li class="header-nav-item">
            <a class="header-nav-item-link" href="../../explanation-25/index.html">Related source</a>
          </li>
          <li class="header-nav-item">
            <a class="header-nav-item-link" href="http://zyco.jp/topics/index.html">Library</a>
          </li>
        </ul>
        </nav>
        
      </div>
    </header>
  </section>
  <section class="second">
    <div class="container">
    </div>
  </section>
</body>

JavaScript

JavaScript の内容は、現在のスクロール位置を求めて > 0 であるなら、「class="is-sticky"」を付け加えて CSS を反映させる。

<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: 65px;
  left: 0;
  width: 100%;
  height: 15px;
  box-shadow: 0 10px 15px rgba(0, 0, 0, 0.7);
}

.is-sticky .first {
  height: var(--sticky-header-height);
  background-color: var(--purple);
}

.is-sticky .first h1 {
  opacity: 0;
  visibility: hidden;
}

.is-sticky .first .page-header {
  opacity: 1;
  visibility: visible;
}

.is-sticky .second {
  padding-top: calc(var(--sticky-header-height) + 10vh);
}

© zycopower,Are U experienced?

Scroll Down