- JavaScriptを使用して目次のチェックボックス状態をCookieに保存するようにしてみました。
- ページ再読み込み後も状態を維持するためにイベントリスナーで設定しています。
- ちらつき防止のためのCSSも設定しました。
1. JavaScriptコード
前回は、サイドバーに目次を追加しました。
チェックボックスの状態をJavaScriptを使ってCookieに保存し、ページを再読み込みした後もその状態を維持するようにしてみました。
/** 2024-08-30 チェックボックスの状態を保存する関数 */
// チェックボックスの状態を保存する関数
function saveCheckboxState() {
const checkbox = document.getElementById('toc-checkbox-3');
document.cookie = `toc-checkbox-3=${checkbox.checked}; max-age=31536000; path=/`;
}
// チェックボックスの状態を読み込む関数
function loadCheckboxState() {
const checkbox = document.getElementById('toc-checkbox-3');
const cookies = document.cookie.split(';');
for (let cookie of cookies) {
const [name, value] = cookie.trim().split('=');
if (name === 'toc-checkbox-3') {
checkbox.checked = value === 'true';
break;
}
}
}
// 即時関数を使用してコードを実行
(function() {
loadCheckboxState();
const checkbox = document.getElementById('toc-checkbox-3');
checkbox.addEventListener('change', saveCheckboxState);
// チェックボックスを表示
document.body.classList.add('js-loaded');
})();
このJavaScriptコードは以下のように動作します:
saveCheckboxState()
関数:
チェックボックスの状態を取得し、Cookieに保存します。loadCheckboxState()
関数:
Cookieからチェックボックスの状態を読み込み、チェックボックスに適用します。- JavaScriptコードは即時関数内で実行
DOMの読み込みを待つ必要がなく、コードがより早く実行されます。
ページ読み込み時にチェックボックスの状態を読み込み、チェックボックスの変更イベントにリスナーを設定します。
2. ちらつき防止のためのロード済みチェック(CSS)
ちらつきを防ぐためにCSSも設定します。
JavaScriptコードが実行されると、body
要素に js-loaded
クラスが追加されます。
これにより、CSSルールが適用され、チェックボックスが表示されます。
/** 2024-08-30 チェックボックスの状態を保存する */
/* JavaScriptが読み込まれる前の暫定表示 */
#main-scroll .toc-checkbox:checked~.toc-content {
opacity: .2;
left:0px;
visibility: hidden;
}
#main-scroll .toc-checkbox:checked~.toc-title::after {
content: '\f101';
}
/* JavaScriptが読み込まれたら表示する */
.js-loaded #main-scroll .toc-checkbox:checked~.toc-title::after {
content: '\f100';
}
.js-loaded #main-scroll .toc-checkbox:checked~.toc-content {
left:16px;
opacity: 1;
visibility: visible;
}
CSSで、.toc-checkbox
クラスを持つ要素(チェックボックス)を初期状態で非表示にします。
こちらもどうぞ。
「クッキーに同意する」とどんな問題があるの?
先日、ブログを開いたら「クッキーに同意する」という表示がありました。そのまま閲覧を続けていたのですが、ということは「同意」したことになりますよね。 特に問題はないでしょうか? 最近、あちこちでクッキーに同意するかが表示されますが、そんなに気にしなくてよいものでしょうか? 「クッキーに同意」というのが、そもそも何に同意しているのか分からなくて、なんか不安になりますよね。 これは、基本的には「法律上の義務で確認している」ものです。 主にネット広告の情報分析で利用されますが、最近の...
[WordPress] カテゴリーが更新されない?
WordPressで記事のカテゴリーを増やしたら、投稿パネルの「カテゴリー」が更新されない、というケースがありました。 カテゴリーを増やした別のPCからログインして、記事を編集しようとすると、記事編集画面のカテゴリーが以前のままなのです。カテゴリーの追加が反映されていません。 設定から「カテゴリー」を表示すると、正しく表示されるのですが……どうもブラウザ(Chrome)にキャッシュが残っているようです。 記事編集画面を更新しても戻りません。 そこで、Chromeの設定から「C...
[JavaScript]下にスクロールするとヘッダーメニューを半透明にするようにした
Xのタイムラインを見ていたら、画面のメニューバーの透過度が上下のスクロールに応じて変化していることに気づきました。 少し下にスクロールすると半透明になり、少し上にスクロールすると元に戻っています。 自分のサイトのヘッダーメニュー(mobile-header-menu-buttons)でも、このような処理をするように、JavaScriptを作りたいと思います。 画面内の情報の表示範囲が増えるからです。 javascript.jsとstyle.css 機能 ユーザーがページを下に...
QRコードを読み込むと、関連記事を確認できます。