document.addEventListener('DOMContentLoaded', function() { // スクロール追従型タイマーの要素を取得 const stickyCountdownWrapper = document.getElementById('sticky-countdown-timer-wrapper'); const stickyCountdownDisplay = document.getElementById('sticky-countdown-display'); const stickyCountdownLabelP = document.querySelector('.sticky-countdown-label'); const stickyCountdownExpiredP = document.getElementById('sticky-countdown-expired'); const bodyElement = document.body; // タイマーの期間を設定(例: 24時間) const countdownDuration = 24 * 60 * 60 * 1000; // 24時間をミリ秒で let endTime; let timerInterval; // localStorageから終了時刻を取得 const storedEndTimeKey = 'eijiBriefStickyCountdownEndTime_v2'; // キー名を更新してリセット効果 const storedEndTime = localStorage.getItem(storedEndTimeKey); if (storedEndTime) { endTime = parseInt(storedEndTime, 10); if (endTime < Date.now()) { // 既に終了している場合 showExpiredMessage(); adjustBodyPadding(); return; // タイマーを開始しない } } else { // 初回アクセス時、またはlocalStorageに情報がない場合 endTime = Date.now() + countdownDuration; localStorage.setItem(storedEndTimeKey, endTime.toString()); } function showTimerDisplayElements() { stickyCountdownDisplay.style.display = 'block'; stickyCountdownLabelP.style.display = 'block'; stickyCountdownExpiredP.style.display = 'none'; stickyCountdownDisplay.classList.add('pulsate'); // パルスアニメーション開始 } function showExpiredMessage() { if(timerInterval) clearInterval(timerInterval); // 念のためタイマー停止 stickyCountdownDisplay.style.display = 'none'; stickyCountdownLabelP.style.display = 'none'; stickyCountdownExpiredP.style.display = 'block'; stickyCountdownDisplay.classList.remove('pulsate'); // パルスアニメーション停止 } function updateCountdown() { const now = Date.now(); const timeLeft = endTime - now; if (timeLeft <= 0) { showExpiredMessage(); adjustBodyPadding(); return; } showTimerDisplayElements(); const totalSeconds = Math.floor(timeLeft / 1000); const totalMinutes = Math.floor(totalSeconds / 60); // 24時間以上の時間表示も可能なように変更 const displayHours = Math.floor(totalMinutes / 60); const displayMinutes = totalMinutes % 60; const displaySeconds = totalSeconds % 60; stickyCountdownDisplay.textContent = String(displayHours).padStart(2, '0') + "時間 " + String(displayMinutes).padStart(2, '0') + "分 " + String(displaySeconds).padStart(2, '0') + "秒"; // 最初のタイマー表示後に一度だけpaddingを調整(毎回呼ぶ必要はないため) // ただし、メッセージ切り替え時にも呼ぶので、関数の最後に移動 adjustBodyPadding(); } function adjustBodyPadding() { if (stickyCountdownWrapper) { const timerHeight = stickyCountdownWrapper.offsetHeight; bodyElement.style.paddingTop = timerHeight + 'px'; } } // 初期表示とタイマー開始 updateCountdown(); // まず一度表示を更新(特に終了済みの場合の判定のため) if (endTime > Date.now()) { // タイマーがまだ有効ならインターバル開始 timerInterval = setInterval(updateCountdown, 1000); } // ウィンドウリサイズ時にもpaddingを調整 window.addEventListener('resize', adjustBodyPadding); // 初期ロード時(画像などが読み込まれ、高さが確定した後)にpaddingを確実に設定 window.addEventListener('load', adjustBodyPadding); // DOMContentLoadedでも一度呼んでおく(スクリプトがbodyの最後にあるため、ある程度高さは取れているはず) adjustBodyPadding(); });