SWELL 下にスクロールすると隠れるヘッダー [WordPress]

wp

WPテーマ「SWELL」ではサイト上部に表示されるヘッダーの追従設定ができます。

しかし常時表示されるので、ヘッダーの高さだけ記事の表示が狭くなってしまうが悩みどころです。

SAVA

スマホだとなるべく広く記事を表示させたいよね。

この記事のカスタマイズをすると、下にスクロールすると隠れるヘッダーが作成できます。

スクロールが停止するか、上にスクロールするとヘッダーが表示されます。

クリックできる目次

下準備

まずは「ヘッダーを追従させる」をオフにしておきましょう。

  • WPダッシュボード
  • 外観
  • カスタマイズ
  • ヘッダー

スクリプトを作成

SWELL子テーマ内 /swell_child/ scripts.js を新規作成

/* --------------------
ヘッダー開閉
-------------------- */
// ヘッダーを取得
const header = document.getElementById("header");
// ヘッダーの高さを取得
const hH = header.clientHeight;
// ウィンドウの高さを取得
const winH = window.innerHeight;
// ページの高さを取得
const docH = document.documentElement.scrollHeight;
// ウィンドウが最下部達した場合のウィンドウ上部の位置を取得
const windBtm = docH - winH;

// 現在地を示す変数を定義
let pos = 0;
// スクロール直前の位置を示す変数を定義
let lastPos = 0;

const onScroll = () => {
  if (pos > hH && pos > lastPos) {
    header.classList.add("header--hide");
  }
  // スクロール位置がヘッダーの高さ分より小さいか
  // またはスクロール位置が最後のスクロール位置より小さい場合はclass名を削除
  if (pos < hH || pos < lastPos || windBtm <= pos) {
    header.classList.remove("header--hide");
  }
  
  // スクロール停止で表示
  setTimeout(() => {
      header.classList.remove("header--hide");
  }, 500);

  // 最後のスクロール位置を保存
  lastPos = pos;
};

window.addEventListener("scroll", () => {
  // スクロールするごとにpos(現在地)の値を更新
  pos = window.scrollY;
  onScroll();
});
SAVA

スクロール停止中にヘッダーを表示したくない場合は、setTimeout のところを消してね。上スクロールしたときだけヘッダーが表示されるよ。

スクリプトを読み込むための設定

  • WPダッシュボード
  • 外観
  • カスタマイズ
  • 高度な設定
  • bodyダグ終了直前に出力するコード

以下のコードをコピペして挿入

<script src="/wp-content/themes/swell_child/scripts.js"></script>

スタイルシートを作成

SWELL 子テーマ内の /swell_child/style.css を編集

/*--------------------------------------
ヘッダー開閉
--------------------------------------*/
#header {
  position: sticky;
  transition: transform 0.4s ease;
}

.header--hide {
  transform: translateY(-150%);
}
SAVA

これだけで設定は完了だよ。動かない場合はブラウザのキャッシュとサーバーのキャッシュをクリアしてみよう。

使いやすいWPテーマ「SWELL」

メモ

SWELL 標準のヘッダー追従設定をした場合は同じヘッダーがもう1つ作成されます。

そのためヘッダーにID(#)を設定した場合にはIDが重複してしまいJavascript が適切に動きません。この記事のカスタマイズではこれを解消できます。

SAVA

下記のカスタマイズしたボタンをヘッダーに置くと、SWELL標準のヘッダー追従の設定をした場合はボタンがうまく動かない不具合が出るよ。

参考サイト

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

この記事を書いた人

サーバーの魅力に取りつかれ、誰にでも分かりやすいサーバー紹介サイトを目指して日夜勉強中。ブログを作りたい人を応援します。

コメント

コメント一覧 (2件)

  • SAVAさん、初めまして!
    若林と申します。

    こちらの記事を拝見させて頂き、実装を行った結果私の環境でも正常い表示することが出来ました!
    普段SWELLのカスタマイズを行う機会が少ないので、カスタマイズの記事をご共有頂き大変有り難いです。

    1点類似のカスタマイズの件でご相談なのですが、
    例えばスクロール中はヘッダーを非表示、スクロール停止ですぐにヘッダーを表示することは
    SWELL上でも可能でしょうか?

    SAVAさんのご都合のよろしい際にお返事いただけますと幸いです。
    よろしくお願い致します。

  • 若林さん

    当サイトのカスタマイズをご利用いただきありがとうございます!

    以下のコードを scripts.js の const onScroll 内に挿入してみてください。

        setTimeout(() => {
            header.classList.remove("header--hide");
        }, 500);
    

    ここでは 500ms 遅延させていますが、0ms にするとガクガクしてしまうので、お好みの値に変更してください。

    有用なカスタマイズだと思いますので、こちらの記事でこの内容を紹介させていただきます。
    どうぞよろしくお願いいたします。

コメントする

クリックできる目次