You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用JavaScript刷新页面且无瞬间跳顶,维持原滚动位置

Fix Instant Top Jump on Auto-Page Refresh

Got it, let's tackle that annoying split-second jump to the top when your page auto-refreshes. The issue happens because the browser's default scroll restoration kicks in after the page loads, so you see the top briefly before it snaps back to your original position. Here are two solid solutions to fix this:

Solution 1: Save Scroll Position with SessionStorage

This method explicitly saves your scroll position before refreshing, then jumps back to it as soon as the DOM is ready—before the browser can show the top.

  1. Replace your existing setTimeout code with this to save the position first:

    setTimeout(() => {
      // Store current scroll position in sessionStorage
      sessionStorage.setItem('savedScrollY', window.scrollY);
      // Trigger the refresh
      window.location.reload();
    }, 10000);
    
  2. Add this code near the top of your page (or inside a DOMContentLoaded listener) to restore the position immediately:

    window.addEventListener('DOMContentLoaded', () => {
      const savedPos = sessionStorage.getItem('savedScrollY');
      if (savedPos) {
        window.scrollTo(0, parseInt(savedPos));
        // Clean up the stored value so it doesn't interfere with future navigations
        sessionStorage.removeItem('savedScrollY');
      }
    });
    

Solution 2: Use History API to Update Scroll State

A more concise approach: leverage the browser's history API to tie your current scroll position to the URL before refreshing. This tells the browser to restore that position immediately on reload, skipping the top flicker entirely.

Replace your original timeout with this:

setTimeout(() => {
  // Update the current history entry with the current scroll position
  history.replaceState(null, document.title, window.location.href);
  window.location.reload();
}, 10000);

Quick Note

If your page has dynamic content that loads after the DOM is ready, you might want to move the scroll restoration to the window.load event instead of DOMContentLoaded—this ensures all images and elements are loaded, so your scroll position is accurate.

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

火山引擎 最新活动