jQuery覆盖加载条(Loading Bar)是一种常见的UI组件,用于在页面或特定区域加载数据时显示进度指示,防止用户误操作并提升用户体验。它通常是一个半透明的覆盖层,包含进度条或旋转动画,覆盖在页面或特定元素上方。
<!-- HTML结构 -->
<div id="loadingOverlay" style="display:none;">
<div class="loading-content">
<div class="loading-spinner"></div>
<div class="loading-text">加载中...</div>
</div>
</div>
<!-- CSS样式 -->
<style>
#loadingOverlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.5);
z-index: 9999;
display: flex;
justify-content: center;
align-items: center;
}
.loading-content {
background: white;
padding: 20px;
border-radius: 5px;
text-align: center;
}
.loading-spinner {
border: 5px solid #f3f3f3;
border-top: 5px solid #3498db;
border-radius: 50%;
width: 50px;
height: 50px;
animation: spin 1s linear infinite;
margin: 0 auto 10px;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
<!-- jQuery控制 -->
<script>
// 显示加载条
function showLoading() {
$('#loadingOverlay').fadeIn();
}
// 隐藏加载条
function hideLoading() {
$('#loadingOverlay').fadeOut();
}
// 使用示例
$(document).ready(function() {
// 点击按钮显示加载
$('#loadDataBtn').click(function() {
showLoading();
// 模拟异步加载
setTimeout(function() {
hideLoading();
}, 2000);
});
});
</script>
// 针对特定元素显示加载
function showElementLoading(element) {
var position = $(element).position();
var width = $(element).outerWidth();
var height = $(element).outerHeight();
var overlay = $('<div class="element-loading-overlay"></div>').css({
position: 'absolute',
top: position.top,
left: position.left,
width: width,
height: height,
backgroundColor: 'rgba(0,0,0,0.3)',
zIndex: 999
});
var spinner = $('<div class="element-loading-spinner"></div>').css({
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)'
});
overlay.append(spinner);
$('body').append(overlay);
return overlay;
}
// 使用示例
var loadingOverlay = showElementLoading('#myElement');
// 加载完成后
loadingOverlay.remove();
原因:
解决方案:
#loadingOverlay {
position: fixed;
z-index: 9999 !important;
display: flex !important;
}
原因:
解决方案:
#loadingOverlay {
display: flex;
justify-content: center;
align-items: center;
}
原因:
解决方案:
#loadingOverlay {
/* 防止触摸穿透 */
touch-action: none;
}
/* 在head中添加视口meta标签 */
<meta name="viewport" content="width=device-width, initial-scale=1.0">
function showProgressLoading() {
var overlay = $('<div id="progressOverlay"></div>').css({
position: 'fixed',
top: 0,
left: 0,
width: '100%',
height: '100%',
backgroundColor: 'rgba(0,0,0,0.5)',
zIndex: 9999
});
var progressBar = $('<div class="progress-bar"></div>').css({
width: '0%',
height: '5px',
backgroundColor: '#4CAF50',
position: 'absolute',
top: 0,
left: 0
});
overlay.append(progressBar);
$('body').append(overlay);
// 模拟进度更新
var progress = 0;
var interval = setInterval(function() {
progress += 5;
progressBar.css('width', progress + '%');
if (progress >= 100) {
clearInterval(interval);
overlay.fadeOut(500, function() {
$(this).remove();
});
}
}, 100);
}
$(document).ajaxStart(function() {
showLoading();
}).ajaxStop(function() {
hideLoading();
}).ajaxError(function() {
hideLoading();
alert('请求失败,请重试');
});
<div id="loadingOverlay" role="status" aria-live="polite" aria-busy="true">
<div class="loading-content">
<div class="loading-spinner" aria-hidden="true"></div>
<div class="loading-text">加载中,请稍候...</div>
</div>
</div>