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

如何用原生JS实现关闭订阅弹窗后10分钟内重载页面也不显示

解决方案

实现逻辑

  • 利用localStorage存储用户点击关闭按钮的时间戳
  • 页面初始化时计算当前时间与存储的关闭时间的差值,小于10分钟则直接隐藏订阅面板
  • 时间超过10分钟或无历史关闭记录时正常展示面板
  • 点击关闭按钮时播放下滑动画,动画结束后移除元素并存储当前时间戳

原代码问题说明

  • 时间差计算逻辑错误,括号位置不正确,导致判断条件无法触发
  • 关闭时只存储了状态标识,没有同步存储关闭时间戳
  • 未处理面板默认隐藏的样式初始化逻辑,符合展示条件时也不会显示面板
  • 动画结束事件监听有重复绑定的问题

完整可运行JS代码

const newsletter = document.getElementById("newsletter_container");
const closeBtn = document.getElementById("close_btn");
// 10分钟对应的毫秒数
const HIDE_DURATION = 10 * 60 * 1000;

// 页面初始化时检查是否需要隐藏面板
const initNewsletter = () => {
  const closeTime = Number(localStorage.getItem('newsletter_close_time'));
  // 有存储的关闭时间,且距离现在不足10分钟,直接隐藏
  if (closeTime && Date.now() - closeTime < HIDE_DURATION) {
    newsletter.remove();
    return;
  }
  // 否则显示面板,修正默认样式里的display:none
  newsletter.style.display = 'block';
}

// 关闭按钮点击事件
closeBtn.addEventListener("click", () => {
  newsletter.classList.add("slide_down");
  // 监听动画结束事件,兼容webkit内核
  const onAnimationEnd = () => {
    newsletter.remove();
    // 存储当前关闭时间戳
    localStorage.setItem('newsletter_close_time', Date.now().toString());
  };
  newsletter.addEventListener("animationend", onAnimationEnd);
  newsletter.addEventListener("webkitAnimationEnd", onAnimationEnd);
});

// 页面加载完成后执行初始化
document.addEventListener('DOMContentLoaded', initNewsletter);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:02