You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:如何实现网站弹窗每周五展示且24小时后隐藏至下周五

嘿,这个需求挺实用的,我来给你拆解实现思路,再结合你的代码调整成符合要求的版本~

核心实现思路

要实现“每周五显示、24小时后自动隐藏到下周五”的效果,我们需要搞定三个关键逻辑:

  • 识别当前日期是不是周五
  • 判断当前时间是否在周五的0点到周六的0点之间(也就是24小时窗口内)
  • 记住用户是否已经关闭过弹窗,避免同一周五内重复弹出(用本地存储就行)
改进后的代码实现

先看HTML部分(你原来的结构可以保留,我加个关闭按钮方便测试):

<div class="elem" style="display: none;">
  <h1>Lorem ipsum</h1>
  <button class="close-popup">关闭弹窗</button>
</div>

然后是JavaScript部分,替换你原来的代码:

const elem = document.querySelector('.elem');
const currentDate = new Date();
const dayOfWeek = currentDate.getDay(); // 0=周日,1=周一...5=周五,6=周六

// 计算本周周五的凌晨0点和周六凌晨0点(周五24小时后的时间点)
const today = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
const fridayStart = new Date(today);
fridayStart.setDate(today.getDate() + (5 - dayOfWeek + 7) % 7); // 定位到最近的周五0点
const fridayEnd = new Date(fridayStart);
fridayEnd.setDate(fridayStart.getDate() + 1); // 周五24小时后就是周六0点

// 从本地存储获取弹窗是否被手动关闭过
const hasHiddenThisWeek = localStorage.getItem('popupHidden');

// 核心判断:今天是周五,且在24小时窗口内,且没被手动关闭过
if (dayOfWeek === 5 && currentDate >= fridayStart && currentDate < fridayEnd && !hasHiddenThisWeek) {
  elem.style.display = 'block';
} else {
  elem.style.display = 'none';
  // 如果过了周五的24小时窗口,清除存储的标记,下周五重新触发
  if (currentDate >= fridayEnd) {
    localStorage.removeItem('popupHidden');
  }
}

// 关闭按钮的逻辑:点击后标记为已隐藏,直到下周五
document.querySelector('.close-popup').addEventListener('click', () => {
  elem.style.display = 'none';
  localStorage.setItem('popupHidden', 'true');
});
关键细节说明
  • 如果你希望弹窗在周五的特定时间(比如早上8点)才显示,只要给fridayStart加个小时设置就行:fridayStart.setHours(8, 0, 0);
  • 初始把弹窗设为display: none,是为了避免页面加载时的“闪现”问题
  • 本地存储的标记会在周六自动清除,所以下周五会自动恢复显示,不用手动重置

内容的提问来源于stack exchange,提问作者TNX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:04:49