博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

浏览器记住滚动位置,返回页面时滚动到该位置

Posted on 2019-01-02 18:32  lee_xiumei  阅读(1495)  评论(0)    收藏  举报
const recordHistoryPosition = () => {
  if (window.history.replaceState) {
    const state = {
      __scrollX: window.scrollX,
      __scrollY: window.scrollY,
    }

 

    window.history.replaceState(state, '')    // 第二个参数是页面 url,缺省值为当前页面
  }
}

 

const scrollToHistoryPosition = () => {
  const state = window.history.state

 

  if (state &&
    Number.isFinite(state.__scrollX) &&
    Number.isFinite(state.__scrollY)) {
    window.scrollTo(state.__scrollX, state.__scrollY)
  }
}

 

const clearHistoryPosition = () => {
  const state = window.history.state

 

  if (state && window.history.replaceState) {
    window.history.replaceState(null, '')
  }
}

 

module.exports = {
  recordHistoryPosition,
  scrollToHistoryPosition,
  clearHistoryPosition,
}
 
注:
  1. 跳转页面时调用 recordHistoryPosition,以记录当前浏览位置;
  2. 在跳转回来时,数据加载完成后调用 scrollToHistoryPosition(一定要等到数据加载完再调用);
  3. 在 scrollToHistoryPosition 下方加上 setTimeout(() => clearHistoryPosition(), 100)。