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

页面重载时隐藏DIV?加载遮罩仅首次显示的实现求助

解决Loading Overlay仅首次显示、按钮刷新不显示的问题

你的代码问题出在window.location.reload()这个方法上——它会立即触发页面刷新,刷新之后当前页面的JS代码就终止执行了,所以后面那句document.getElementById('loading').style.display = 'none'根本没机会运行,自然达不到预期效果。

要实现「首次加载显示Loading,点击自定义刷新按钮时不显示,F5刷新不受影响」的需求,我们可以借助localStorage来标记刷新的来源,具体方案如下:

完整实现代码

<!-- 你的Loading Overlay结构 -->
<div id="loading" style="display: none; position: fixed; top:0; left:0; width:100%; height:100%; background: rgba(0,0,0,0.5); color:white; display:flex; align-items:center; justify-content:center;">
  Loading...
</div>

<!-- 刷新按钮 -->
<button type="button" onclick="reloadWithNoLoading()">刷新页面</button>

<script>
// 页面加载时执行的逻辑
window.addEventListener('load', function() {
  const isButtonReload = localStorage.getItem('buttonReload');
  
  if (isButtonReload) {
    // 如果是按钮触发的刷新,隐藏Loading
    document.getElementById('loading').style.display = 'none';
    // 清除标记,避免下次F5刷新也受影响
    localStorage.removeItem('buttonReload');
  } else {
    // 首次加载或F5刷新,显示Loading
    document.getElementById('loading').style.display = 'flex';
    // 这里可以根据实际需求调整,比如异步数据加载完成后再隐藏Loading
    // 示例:如果有接口请求,可在请求回调里执行 document.getElementById('loading').style.display = 'none';
  }
});

// 按钮点击的刷新逻辑
function reloadWithNoLoading() {
  // 设置标记,告诉下一次页面加载是按钮触发的
  localStorage.setItem('buttonReload', 'true');
  // 刷新页面
  window.location.reload();
}
</script>

工作原理说明

  • 点击自定义刷新按钮时,先在localStorage中存入一个标记buttonReload,然后再执行页面刷新。
  • 页面加载完成后,先检查这个标记:
    • 如果存在标记,说明是按钮触发的刷新,直接隐藏Loading,然后清除标记(确保下次F5刷新时标记不存在)。
    • 如果没有标记,说明是首次加载或者F5刷新,正常显示Loading。
  • localStorage在页面刷新后不会被清除,刚好能帮我们传递这个刷新来源的信息,完美契合你的需求。

另外补充一点:如果你的Loading是用来等待异步数据加载的,那可以把隐藏Loading的逻辑放在数据加载完成的回调里,而不是页面加载完成就隐藏,这样更符合实际业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:14:41