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

滚动触发location.assign()跳转后无法返回上一页的问题求助

解决滚动触发跳转后无法返回原页面的问题

问题核心:从index2.html返回index.html时,页面会停留在之前滚动到底部的位置,导致scroll事件再次触发,立刻又跳回index2.html,根本没法停在原页面。

解决方案1:添加触发标记,避免重复执行

给跳转逻辑加个开关,只允许触发一次,返回后可以重置开关让它能再次触发:

// 初始化标记:未触发过跳转
let hasTriggeredJump = false;

window.onscroll = function(ev) {
    // 只有没触发过跳转,且确实滚动到底部时才执行
    if (!hasTriggeredJump && (window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
       hasTriggeredJump = true; // 触发后锁死开关
       setTimeout(function() {
          location.assign('./index2.html')
       }, 1000)
    }
};

// 监听页面显示事件,返回原页面时重置开关
window.addEventListener('pageshow', function() {
    hasTriggeredJump = false;
});

解决方案2:清除重复定时器,防止多次触发

如果用户快速滚动到底部多次,会生成多个定时器,这个方案能避免叠加,同时离开底部时取消跳转:

let jumpTimer = null;

window.onscroll = function(ev) {
    if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
       // 先清除之前的定时器,避免重复触发
       if (jumpTimer) clearTimeout(jumpTimer);
       jumpTimer = setTimeout(function() {
          location.assign('./index2.html')
       }, 1000)
    } else {
       // 离开底部区域时,取消跳转定时器
       if (jumpTimer) {
           clearTimeout(jumpTimer);
           jumpTimer = null;
       }
    }
};

// 返回原页面时清空定时器状态
window.addEventListener('pageshow', function() {
    if (jumpTimer) {
        clearTimeout(jumpTimer);
        jumpTimer = null;
    }
});

补充说明

  • 方案1适合只需要触发一次跳转的场景,返回后可以重置状态再次触发;
  • 方案2更灵活,滚动离开底部后会取消跳转,只有停留在底部时才会触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:45:36