如何设置jQuery弹窗关闭后一周内再次访问时不再显示?
当然可以!要实现「关闭弹窗后一周内不再显示」的需求,我们可以用Cookie或者localStorage来持久化用户的关闭状态,结合你现有的jQuery代码就能轻松搞定。下面是具体的实现方案:
核心思路
我们需要在用户点击关闭按钮时,存储一个带过期时间的标记(比如一周后过期);每次页面加载或滚动触发弹窗前,先检查这个标记是否存在且未过期——如果存在,就跳过弹窗显示逻辑。
具体代码修改
你已经引入了jQuery 1.11.3,完全满足需求,接下来按以下步骤调整代码:
1. 先封装Cookie操作工具函数(推荐用Cookie,支持明确的过期时间设置)
先添加两个简单的函数,用来设置和读取Cookie:
// 设置Cookie,支持指定过期天数 function setCookie(name, value, days) { let expires = ""; if (days) { const date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = `${name}=${value || ""}${expires}; path=/`; } // 读取指定名称的Cookie function getCookie(name) { const nameEQ = `${name}=`; const cookieArr = document.cookie.split(';'); for(let i = 0; i < cookieArr.length; i++) { let c = cookieArr[i]; while (c.charAt(0) === ' ') c = c.substring(1); if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length); } return null; }
2. 修改弹窗触发逻辑(比如你的checkShowDiv函数)
在原来的滚动触发逻辑前,先检查Cookie是否存在:
function checkShowDiv() { // 先检查用户是否已经关闭过弹窗且未过期 const hasClosedPopup = getCookie('popup_closed'); if (hasClosedPopup === 'true') { return; // 有有效标记,直接跳过弹窗显示 } // 保留你原来的滚动触发逻辑(示例,替换成你实际的代码) const scrollTop = $(window).scrollTop(); const windowHeight = $(window).height(); const documentHeight = $(document).height(); if (scrollTop > (documentHeight - windowHeight) / 2) { $('#your-popup-id').fadeIn(); // 替换成你实际的弹窗ID // 防止滚动时重复触发,可移除滚动监听 $(window).off('scroll', checkShowDiv); } }
3. 修改关闭按钮的点击事件
当用户点击关闭按钮时,设置一个7天后过期的Cookie:
// 替换成你实际的关闭按钮选择器 $('.popup-close-btn').on('click', function() { $('#your-popup-id').fadeOut(); // 隐藏弹窗 // 设置Cookie,标记用户已关闭,7天后过期 setCookie('popup_closed', 'true', 7); // 如果原来有会话级别的阻止逻辑(比如用变量),可以删掉了 });
可选:用localStorage替代Cookie
如果你更倾向于用localStorage(不需要和服务器交互,存储量更大),可以用以下工具函数替换Cookie相关代码:
// 设置带过期时间的localStorage function setLocalStorageWithExpiry(key, value, days) { const now = new Date(); const item = { value: value, expiry: now.getTime() + days * 24 * 60 * 60 * 1000 }; localStorage.setItem(key, JSON.stringify(item)); } // 获取localStorage并自动检查过期 function getLocalStorageWithExpiry(key) { const itemStr = localStorage.getItem(key); if (!itemStr) return null; const item = JSON.parse(itemStr); const now = new Date(); // 如果已过期,移除数据并返回null if (now.getTime() > item.expiry) { localStorage.removeItem(key); return null; } return item.value; }
然后把触发逻辑里的getCookie改成getLocalStorageWithExpiry('popup_closed'),关闭按钮点击时改成setLocalStorageWithExpiry('popup_closed', 'true', 7)即可。
注意事项
- 记得把代码中的
#your-popup-id和.popup-close-btn替换成你实际项目中的弹窗ID和关闭按钮选择器。 - Cookie的
path=/确保在整个网站域名下都有效,如果你只想让这个标记在特定页面生效,可以修改path的值(比如path=/popup-dev/)。
这样修改后,用户关闭弹窗后,一周内再次访问页面时,弹窗都不会自动弹出啦!
内容的提问来源于stack exchange,提问作者Mara Barn
相关产品推荐
相关产品推荐

