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

JS实现滚动到指定区域触发弹窗,如何避免刷新页面时误触发?

解决方案

逻辑调整说明

  • 新增初始状态校验:页面加载时就记录初始滚动位置和目标区域位置,如果初始位置已经超过目标区域,直接排除触发资格,解决刷新自动弹窗问题
  • 把关闭按钮的事件绑定从滚动回调中移出,避免每次滚动都重复绑定事件造成的性能损耗
  • 保留单次触发标记,确保弹窗全局仅显示一次

完整实现代码

const section = document.querySelector('#section-1');
const card = document.querySelector('#card-popup');
const closebtn = document.querySelector('#close-popup');
let hasPopupShown = false;
// 页面初始化时记录初始滚动位置、目标区域顶部位置
const initialScrollY = window.scrollY;
const topOfSection = section.offsetTop;

// 关闭按钮事件仅绑定一次
closebtn.addEventListener('click', () => {
  card.style.display = "none";
});

const cardPop = () => {
  const currentScrollY = window.scrollY;
  // 触发条件同时满足才显示弹窗
  if (
    !hasPopupShown && 
    currentScrollY >= topOfSection && 
    // 若要严格限制仅初始在顶部才触发,可将下方条件改为 initialScrollY === 0
    initialScrollY < topOfSection
  ) {
    card.style.display = "block";
    hasPopupShown = true;
  }
}

window.addEventListener('scroll', cardPop);

可选严格模式

如果需求要求必须是用户从页面最顶部开始滚动才触发弹窗,直接把判断条件里的initialScrollY < topOfSection替换为initialScrollY === 0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:06:03