メインビューをすぎたら色が変わるヘッダー

目次

メインビューをすぎたら色が変わるヘッダー

See the Pen Untitled by Tomo56 (@tomokoro) on CodePen.

JavaScriptで書きかえてみる

document.addEventListener("DOMContentLoaded", function () {
  window.addEventListener("scroll", function () {
    const sliderSection = document.querySelector(".p-section1");
    const header = document.querySelector(".p-header");
    const logo = document.querySelector(".p-header__logo");

    if (!sliderSection || !header || !logo) return;

    const sliderHeight01 = sliderSection.offsetHeight;
    const scrollTop = window.scrollY;

    if (scrollTop > sliderHeight01 - 30) {
      header.classList.add("change-color");
      logo.classList.add("change-color");
    } else {
      header.classList.remove("change-color");
      logo.classList.remove("change-color");
    }
  });
});

JavaScriptを使って細かい指定を入れてみる

// headerの高さを取得して、fvの場合はpadding-topをつける、sub-fvの場合はmargin-topをつける
const header = document.querySelector('.header');
const fv = document.querySelector('.fv');
const subFv = document.querySelector('.sub-fv');
if (fv) fv.style.paddingTop = `${header.offsetHeight}px`;
if (subFv) subFv.style.marginTop = `${header.offsetHeight}px`;

トップページの時はpaddingで設定したいが仮想ページではmarginで設定したいとき。

fvやsubFvが存在しないページでこのコードが実行されると、
fvやsubFvがnullとなり、
fv.styleやsubFv.styleでエラー(TypeError)が発生するようです。

そのため、

if (fv) …と条件をつける必要があります。

よかったらシェアしてね!
  • URLをコピーしました!
目次