CSS の animation-timeline プロパティに指定する scroll() と view() は、どちらもアニメーションとスクロールを連動させる関数である。
scroll() はスクロール量に応じてアニメーションを進行させることができる。スクロールの進行状況は 0% から 100% の範囲で表され、下にスクロールすることで進行状況が 100% に近づく。
view() は、アニメーションするビュー進行タイムラインを提供する主体要素を示す。ビュー進行タイムラインは、最も近い先祖スクロール内の主体要素の可視性の変化によって進行する。たとえば、ブロック軸上のスクローラーと交差する要素にアニメーションをバインドするには view(block) を使用する。
JavaScript でブラウザのスクロールイベントを検出、スクロールの現在位置に応じてヘッダー要素の表示状態を切り替え、最上位へスクロールするとヘッダーが隠れる、下方向へスクロールするとヘッダーが現れて、ナビゲーションを利用できる。
<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="#">About</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>
</nav>
</header>
</section>
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>
初期起動画面のフルスクリーン画像(.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