原生js,给博客添加“页面加载中”效果

自上周重新开始写博客以来,一直在完善博客主题,现在这款主题是我2016年从ghost扒来的,自己做了很多魔改,可以说是“面目全非”了,到目前为止,大的框架基本已经定型。估摸着增加一点其它效果,比如页面的loading。

技术不够,搜索来凑,首先想到的是去百度上查找相关的教程,尝试了很多都差强人意。

后来我才想到AI,看来思维方式要转变一下,应该早点就想到的。简单的问了一句豆包:给博客添加页面加载中效果,它列出了3种应用场景:全局页面加载、图片懒加载 Loading、异步内容加载(如 “加载更多” 文章),显然我要的是第一种。

使用方法:
一、在<body>标签后添加

<!-- 全局 Loading 遮罩层 -->
<div id="global-loader" class="loader-overlay">
  <!-- Loading 动画(可替换为自己喜欢的样式) -->
  <div class="loader-spinner">
    <span class="dot"></span>
    <span class="dot"></span>
    <span class="dot"></span>
  </div>
  <p class="loader-text">加载中...</p>
</div>

二、在header.php中第一个<div>标签前加入

<div id="blog-content" style="display: none;">

三、在footer.php最后一个</div>闭合标签后,加一个</div>,作为.blog-content的闭合。

四、CSS样式

/* 遮罩层:全屏覆盖,居中对齐 */
.loader-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background: #fff; /* 匹配博客背景色 */
  z-index: 9999; /* 确保在最上层 */
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  transition: opacity 0.5s ease; /* 淡出过渡 */
}

/* 脉冲点动画(3个点依次缩放) */
.loader-spinner {
  display: flex;
  gap: 8px;
  margin-bottom: 16px;
}
.dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #3b82f6; /* 博客主色调 */
  animation: pulse 1.2s infinite ease-in-out;
}
.dot:nth-child(2) { animation-delay: 0.4s; }
.dot:nth-child(3) { animation-delay: 0.8s; }

/* 加载文字样式 */
.loader-text {
  color: #64748b;
  font-size: 16px;
}

/* 动画关键帧 */
@keyframes pulse {
  0%, 100% { transform: scale(0.8); opacity: 0.6; }
  50% { transform: scale(1.2); opacity: 1; }
}

/* 加载完成后:遮罩层淡出 */
.loader-overlay.hidden {
  opacity: 0;
  pointer-events: none; /* 避免遮挡内容点击 */
}

五、添加JavaScript

// 页面所有资源(图片、脚本等)加载完成后执行
window.addEventListener('load', function() {
  const loader = document.getElementById('global-loader');
  const content = document.getElementById('blog-content');
  
  // 延迟 300ms 隐藏 Loading(避免动画过短,提升体验)
  setTimeout(() => {
    loader.classList.add('hidden'); // 遮罩层淡出
    content.style.display = 'block'; // 显示博客内容
    // 可选:给内容添加淡入动画
    content.style.opacity = '0';
    content.style.transition = 'opacity 0.5s ease';
    setTimeout(() => content.style.opacity = '1', 100);
  }, 300);
});

// 可选:处理页面加载超时(避免无限加载)
setTimeout(() => {
  const loader = document.getElementById('global-loader');
  if (!loader.classList.contains('hidden')) {
    document.querySelector('.loader-text').textContent = '加载较慢,稍候...';
  }
}, 5000);

最后,可以根据自己喜好更改提示文字,通过CSS文件设计不同的颜色等等。

Tags:

🗨️已有7条评论

  1. 寻鹤 👤寻鹤
     

    比起页面加载效果,更喜欢能直接打开,提高服务器或者,可以提取加载页面

    1. Loekman 👤Loekman
      @寻鹤 

      各有各的好,我这个主机有时抽风访问很慢,想着页面可以过渡一下

  2. obaby 👤obaby
     

    来个瞬开的

    1. Loekman 👤Loekman
      @obaby 

      把Timeout改成1ms,哈哈哈

  3. 闲余 👤闲余
     

    Ai是真的方便,我有时候直接丢给豆包给我编码

    1. Loekman 👤Loekman
      @闲余 

      早就听说ai写代码,没有实践过

      1. 闲余 👤闲余
        @Loekman 

        可以试试,真的很方便

发表评论