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

Infinite Ajax Scroll问题:返回按钮跳转至错误滚动位置

问题

在Shopify商品集合页测试Infinite Ajax Scroll基础实现时,加载更多功能正常,但用户跳转至其他页面后点击返回按钮,页面会回到底部而非之前的滚动位置。当前使用代码如下:

let ias = new InfiniteAjaxScroll('.collection-grid', {
  item: '.grid-product',
  next: '.pagination__next',
  //pagination: '.pagination'
});

// update title and url then scrolling through pages
ias.on('page', (e) => {
  document.title = e.title;

  let state = history.state;

  history.replaceState(state, e.title, e.url);
});

原以为返回按钮默认能正常工作,是否需要手动跟踪滚动位置?

解决方案

是的,必须手动跟踪并记录滚动位置——Infinite Ajax Scroll默认不会自动处理浏览器历史记录中的滚动状态,得自己加逻辑来实现。具体修改步骤如下:

  1. 页面加载时恢复滚动位置
    当用户通过返回按钮回到页面时,检查历史记录状态里是否存了滚动位置,有的话直接定位过去:
// 页面加载时恢复之前的滚动位置
window.addEventListener('load', () => {
  if (history.state && history.state.scrollY) {
    window.scrollTo(0, history.state.scrollY);
  }
});
  1. 更新历史记录时保存滚动位置
    修改page事件的处理代码,在更新URL和标题的同时,把当前的滚动位置存入history state:
ias.on('page', (e) => {
  document.title = e.title;
  // 保留原有state属性,同时添加当前滚动位置
  const newState = {
    ...history.state,
    scrollY: window.scrollY
  };
  history.replaceState(newState, e.title, e.url);
});
  1. 监听浏览器前进/后退事件
    加个popstate事件监听,确保切换历史记录时能同步滚动位置:
window.addEventListener('popstate', (event) => {
  if (event.state && event.state.scrollY) {
    window.scrollTo(0, event.state.scrollY);
  }
});

注意事项

  • 不要直接覆盖原有history.state,用展开运算符保留原有属性,避免破坏浏览器默认的历史记录状态。
  • 测试前记得清浏览器缓存,确保新代码能正常加载执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:21:19