资源无需等待,交易就趁现在,全面资源整合网络大咖云集,让你轻松玩转互联网!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
不依赖任何框架,原生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,可根据需求调整(如网络慢的场景可设更长)。 |