【SWELL】下スクロールで消えて、上スクロールで復活するヘッダーの作り方(JSのみ。PC・スマホ個別設定可能)

当ページのリンクには広告が含まれています。

「スマホの画面を広く見せたい」「記事に集中してほしいけれど、ナビゲーションも残したい」
そんな時におすすめなのが、
下にスクロールするとスッと消え
上にスクロールするとフワッと現れるヘッダーです。

大人気テーマ「SWELL」の標準機能(追従ヘッダー)と、少しのコード(JavaScript)を組み合わせるだけで簡単に実装できます。

今回はサイト軽量化のためにjQueryを使わない(バニラJavaScript)方法で、
さらにPCとスマホで消えるタイミング別々に調整した決定版のコードを解説します!

もくじ

SWELL標準の「ヘッダー追従」を有効にする

まずは下準備として、SWELLの標準機能でヘッダーが追いかけてくるように設定します。ここがONになっていないと、追従用のパーツが生成されないため必ず設定してください。

  1. WordPress管理画面から 「外観」 > 「カスタマイズ」 > 「ヘッダー」 を開く
  2. 「ヘッダーの追従設定」 の項目を探す
  3. 「PCで追従させる」「スマホで追従させる」の両方にチェックを入れてON にして保存する

カスタマイズコードを貼り付ける

設定はたった1箇所、JavaScriptを貼り付けるだけで完了します。
貼り付ける場所「外観」 > 「カスタマイズ」 > 「高度な設定」</body_head>直前に次のコードを貼り付けてください。

<script>
document.addEventListener('DOMContentLoaded', () => {
  let beforePos = 0;
  
  // 対象のヘッダー要素を取得
  const pcFixHeader = document.querySelector('.l-fixHeader');
  const spHeader = document.querySelector('.l-header');

  // アニメーションを0.7秒(PC)と0.3秒(スマホ)にする基礎設定
  if (pcFixHeader) {
    pcFixHeader.style.setProperty('transition', 'transform 0.7s ease-in-out', 'important');
    pcFixHeader.style.setProperty('opacity', '1', 'important');
    pcFixHeader.style.setProperty('visibility', 'visible', 'important');
  }
  if (spHeader) {
    spHeader.style.setProperty('transition', 'transform 0.3s ease-in-out', 'important');
  }

  // スクロール時のメイン処理
  const handleScroll = () => {
    const scrollPos = window.scrollY || document.documentElement.scrollTop;
    const isPC = window.innerWidth >= 960;
    const targetThresh = isPC ? 1000 : 700;

    // ① 基準値(PC:1000px / SP:700px)未満のときは通常位置へ戻す
    if (scrollPos < targetThresh) {
      if (isPC && pcFixHeader) {
        pcFixHeader.style.setProperty('transform', 'translateY(-110%)', 'important');
        pcFixHeader.style.setProperty('-webkit-transform', 'translateY(-110%)', 'important');
      }
      if (!isPC && spHeader) {
        spHeader.style.setProperty('transform', 'translateY(0)', 'important');
        spHeader.style.setProperty('-webkit-transform', 'translateY(0)', 'important');
      }
      beforePos = scrollPos;
      return;
    }

    // ② 基準値を超えた直後のチラつき・誤判定防止
    if (beforePos < targetThresh) {
      beforePos = scrollPos;
      if (isPC && pcFixHeader) {
        pcFixHeader.style.setProperty('transform', 'translateY(-110%)', 'important');
        pcFixHeader.style.setProperty('-webkit-transform', 'translateY(-110%)', 'important');
      }
      if (!isPC && spHeader) {
        spHeader.style.setProperty('transform', 'translateY(-110%)', 'important');
        spHeader.style.setProperty('-webkit-transform', 'translateY(-110%)', 'important');
      }
      return;
    }

    // ③ 基準値を超えている状態での純粋な上下スクロール判定
    if (scrollPos > beforePos) {
      // 【下スクロール時:隠す】SWELLの「translateY(0) !important」を完全に上書きして強制的に隠す
      if (isPC && pcFixHeader) {
        pcFixHeader.style.setProperty('transform', 'translateY(-110%)', 'important');
        pcFixHeader.style.setProperty('-webkit-transform', 'translateY(-110%)', 'important');
      }
      if (!isPC && spHeader) {
        spHeader.style.setProperty('transform', 'translateY(-110%)', 'important');
        spHeader.style.setProperty('-webkit-transform', 'translateY(-110%)', 'important');
      }
    } else if (scrollPos < beforePos) {
      // 【上スクロール時:出す】元の位置に戻す(ここも0.7秒が適用されます)
      if (isPC && pcFixHeader) {
        pcFixHeader.style.setProperty('transform', 'translateY(0)', 'important');
        pcFixHeader.style.setProperty('-webkit-transform', 'translateY(0)', 'important');
      }
      if (!isPC && spHeader) {
        spHeader.style.setProperty('transform', 'translateY(0)', 'important');
        spHeader.style.setProperty('-webkit-transform', 'translateY(0)', 'important');
      }
    }
    
    beforePos = scrollPos;
  };

  window.addEventListener('scroll', handleScroll, { passive: true });
});
</script>

これで設定はすべて完了です!古いキャッシュを読み込まないよう、シークレットウィンドウ等でスクロールして動きを確認してみてください。

ヘッダーが消え始めるタイミングを変えたい場合

もう少し早く(または遅く)ヘッダーが消え始めてほしい」という場合は、先ほどのJavaScriptコード内にある「1000」や「700」という数値を変更します。

これは「ページの一番上から何ピクセル下にスクロールしたら機能を動かすか」という基準値です。

PCのタイミング調整

1000 の数値を変更(例:1400 にすると、もっと記事を読み進めてから消えるようになります)

スマホのタイミング調整

700 の数値を変更(例:400 にするともっと早く消えます)

自分のブログのファーストビューの長さや記事の読まれ方に合わせて、自由に数値を微調整してみてください。

まとめ

システムを綺麗にコントロールすることで、ユーザーの閲覧を邪魔しないスマートなヘッダーが実現できます。

PCとスマホで個別に条件を設定し、さらにバニラJSを採用したことで、
「デザインが崩れない」
「一瞬チラつかない」
「サイトが重くならない」
という最高の環境を作ることができます。ぜひあなたのブログでも試してみてください!

※当サイトはこのコードを採用してます!

よかったらシェアしてね!
  • URLをコピーしました!
もくじ