资源无需等待,交易就趁现在,全面资源整合网络大咖云集,让你轻松玩转互联网!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
不依赖任何框架,原生JS实现网站加载loading动画。
效果展示电脑端: 手机端效果一致的哈 实现方法 在网站目录创建文件 itjscc.js - (function() {
- if (window.itjsccPageLoader) return;
- const loadStartTime = performance.now();
- let isComplete = false;
- const style = document.createElement('style');
- style.textContent = `
- /* 加载覆盖层:半透明效果 */
- .itjscc-ploader {
- position: fixed !important;
- inset: 0 !important;
- background: rgba(255, 255, 255, 0.8) !important; /* 80%透明度的白色,可看到下层 */
- backdrop-filter: blur(2px) !important; /* 轻微模糊背景,增强层次感 */
- z-index: 999999 !important;
- display: grid !important;
- place-items: center !important;
- margin: 0 !important;
- padding: 0 !important;
- pointer-events: auto !important;
- transition: opacity 0.6s ease-out !important;
- }
-
- /* 隐藏状态 */
- .itjscc-ploader.hidden {
- opacity: 0 !important;
- visibility: hidden !important;
- pointer-events: none !important;
- }
-
- /* 加载动画容器 */
- .itjscc-ploader-container {
- text-align: center !important;
- padding: 24px !important;
- background: rgba(255, 255, 255, 0.95) !important; /* 加载器本身背景更实一些 */
- border-radius: 12px !important;
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1) !important;
- min-width: 220px !important;
- }
-
- /* 加载动画元素 */
- .itjscc-ploader-animation {
- width: 50px !important;
- height: 50px !important;
- margin: 0 auto 16px !important;
- position: relative !important;
- }
-
- .itjscc-ploader-circle {
- width: 100% !important;
- height: 100% !important;
- position: absolute !important;
- top: 0 !important;
- left: 0 !important;
- border-radius: 50% !important;
- border: 3px solid transparent !important;
- border-top-color: #3b82f6 !important;
- animation: itjscc-rotate 1.5s linear infinite !important;
- }
-
- .itjscc-ploader-circle:nth-child(2) {
- border-top-color: #10b981 !important;
- animation-delay: 0.2s !important;
- transform: scale(0.8) !important;
- }
-
- .itjscc-ploader-text {
- font-family: -apple-system, BlinkMacSystemFont, sans-serif !important;
- font-size: 15px !important;
- color: #1e293b !important;
- font-weight: 500 !important;
- }
-
- /* 旋转动画 */
- @keyframes itjscc-rotate {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
- }
- `;
- (document.head || document.documentElement).appendChild(style);
- const loader = document.createElement('div');
- loader.className = 'itjscc-ploader';
- loader.innerHTML = `
- <div class="itjscc-ploader-container">
- <div class="itjscc-ploader-animation">
- <div class="itjscc-ploader-circle"></div>
- <div class="itjscc-ploader-circle"></div>
- </div>
- <div class="itjscc-ploader-text">Loading...</div>
- </div>
- `;
- document.documentElement.appendChild(loader);
- const statusText = loader.querySelector('.itjscc-ploader-text');
- const statusMessages = ["Loading...", "Preparing content...", "Almost ready..."];
- let msgIndex = 0;
-
- const textInterval = setInterval(() => {
- if (!isComplete) {
- msgIndex = (msgIndex + 1) % statusMessages.length;
- statusText.textContent = statusMessages[msgIndex];
- } else {
- clearInterval(textInterval);
- }
- }, 2000);
- function hideLoader() {
- if (isComplete) return;
- isComplete = true;
-
- clearInterval(textInterval);
- statusText.textContent = "Ready";
-
- // 在这里可以设置加载动画最少显示时间
- const MIN_DISPLAY_TIME = 1000;
- const elapsed = performance.now() - loadStartTime;
- const delay = elapsed < MIN_DISPLAY_TIME ? MIN_DISPLAY_TIME - elapsed : 0;
-
- setTimeout(() => {
- loader.classList.add('hidden');
-
- // 动画结束后彻底清理
- setTimeout(() => {
- if (loader.parentNode) loader.parentNode.removeChild(loader);
- if (style.parentNode) style.parentNode.removeChild(style);
- }, 600);
- }, delay);
- }
- let loaded = false;
- function onLoadComplete() {
- if (loaded) return;
- loaded = true;
- hideLoader();
- }
- if (document.readyState === 'complete' || document.readyState === 'interactive') {
- onLoadComplete();
- } else {
- document.addEventListener('DOMContentLoaded', onLoadComplete);
- window.addEventListener('load', onLoadComplete);
- document.addEventListener('readystatechange', () => {
- if (document.readyState === 'complete' || document.readyState === 'interactive') {
- onLoadComplete();
- }
- });
- }
- window.itjsccPageLoader = { hide: hideLoader };
- })();
复制代码把以上代码粘贴到刚刚创建的itjscc.js文件 文件名可以自定义,只要引入时一致即可。
可根据自己的需要更改加载动画显示时间。
在需要加载动画的页面加上以下代码
- <script src="itjscc.js"></script>
复制代码根据自己的情况判断需不需要修改src后的路径。 这里推荐把这行代码放在head标签的第一行,确保优先执行。
错误位置提醒: ❌ 不要放在<body>内部(无论头部还是底部):会延迟动画创建时机,可能导致页面先显示空白或内容,再弹出加载动画,体验割裂。 ❌ 不要放在其他大型脚本之后:若前面有耗时的脚本,会阻塞加载动画执行,失去 “提前显示” 的意义。 ❌ 不要放在<link rel=”stylesheet”>之后:虽然样式表会阻塞渲染,但加载动画的样式是通过脚本动态创建的,放在最顶部能确保样式优先生效。 推荐放在<head>标签下第一行,既能保证加载动画在页面加载的第一时间就准备就绪,又不会对核心性能造成影响,达到尽早显示、不拖慢加载的效果。 若希望网站所有页面都加上加载动画样式,只需要在全局文件引入即可,例如:header文件。
代码说明性能优化:动画完全用 CSS 实现,不占用 JS 主线程,性能高效。加载完成后彻底清理 DOM 和样式,无冗余资源残留。避免复杂选择器和重绘操作,CSS 逻辑轻量。 用户体验:半透明覆盖层既显示加载状态,又让用户感知 “内容正在呈现”,减少等待焦虑。状态文本轮换和最少显示时间(1 秒),避免 “闪一下就消失” 的突兀感。淡出动画平滑过渡,提升精致度。 兼容性与安全性:不依赖任何框架,原生 JS 实现,兼容所有现代浏览器。动态创建元素,不影响网页原有结构和 SEO(搜索引擎会忽略加载层)。 样式定制:如需修改颜色 / 尺寸,可调整 CSS 中的border-top-color(动画颜色)、background(透明度)、width/height(动画大小)等属性。 至少显示时间:MIN_DISPLAY_TIME 默认 1000ms,可根据需求调整(如网络慢的场景可设更长)。 |