SWELL 下にスクロールすると隠れるヘッダー [WordPress]
WPテーマ「SWELL」ではサイト上部に表示されるヘッダーの追従設定ができます。
しかし常時表示されるので、ヘッダーの高さだけ記事の表示が狭くなってしまうが悩みどころです。
SAVA
スマホだとなるべく広く記事を表示させたいよね。
この記事のカスタマイズをすると、下にスクロールすると隠れるヘッダーが作成できます。
スクロールが停止するか、上にスクロールするとヘッダーが表示されます。
クリックできる目次
下準備
まずは「ヘッダーを追従させる」をオフにしておきましょう。
スクリプトを作成
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();
});
スクロール停止中にヘッダーを表示したくない場合は、setTimeout のところを消してね。上スクロールしたときだけヘッダーが表示されるよ。
スクリプトを読み込むための設定
以下のコードをコピペして挿入
<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%);
}
これだけで設定は完了だよ。動かない場合はブラウザのキャッシュとサーバーのキャッシュをクリアしてみよう。
メモ
SWELL 標準のヘッダー追従設定をした場合は同じヘッダーがもう1つ作成されます。
そのためヘッダーにID(#)を設定した場合にはIDが重複してしまいJavascript が適切に動きません。この記事のカスタマイズではこれを解消できます。
下記のカスタマイズしたボタンをヘッダーに置くと、SWELL標準のヘッダー追従の設定をした場合はボタンがうまく動かない不具合が出るよ。
コメント
コメント一覧 (2件)
SAVAさん、初めまして!
若林と申します。
こちらの記事を拝見させて頂き、実装を行った結果私の環境でも正常い表示することが出来ました!
普段SWELLのカスタマイズを行う機会が少ないので、カスタマイズの記事をご共有頂き大変有り難いです。
1点類似のカスタマイズの件でご相談なのですが、
例えばスクロール中はヘッダーを非表示、スクロール停止ですぐにヘッダーを表示することは
SWELL上でも可能でしょうか?
SAVAさんのご都合のよろしい際にお返事いただけますと幸いです。
よろしくお願い致します。
若林さん
当サイトのカスタマイズをご利用いただきありがとうございます!
以下のコードを scripts.js の const onScroll 内に挿入してみてください。
ここでは 500ms 遅延させていますが、0ms にするとガクガクしてしまうので、お好みの値に変更してください。
有用なカスタマイズだと思いますので、こちらの記事でこの内容を紹介させていただきます。
どうぞよろしくお願いいたします。