咨询:如何实现网站弹窗每周五展示且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
相关产品推荐
相关产品推荐

