首页
学习
活动
专区
圈层
工具
发布

jquery覆盖加载条div

jQuery覆盖加载条div的实现

基础概念

jQuery覆盖加载条(Loading Bar)是一种常见的UI组件,用于在页面或特定区域加载数据时显示进度指示,防止用户误操作并提升用户体验。它通常是一个半透明的覆盖层,包含进度条或旋转动画,覆盖在页面或特定元素上方。

实现方式

1. 基本覆盖加载条实现

代码语言:txt
复制
<!-- 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>

2. 针对特定元素的覆盖加载

代码语言:txt
复制
// 针对特定元素显示加载
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();

常见问题及解决方案

1. 加载条不显示

原因

  • z-index值不够高,被其他元素覆盖
  • 定位方式不正确
  • display属性被其他样式覆盖

解决方案

代码语言:txt
复制
#loadingOverlay {
  position: fixed;
  z-index: 9999 !important;
  display: flex !important;
}

2. 加载条无法居中

原因

  • 父容器没有设置合适的定位
  • 使用了错误的居中方法

解决方案

代码语言:txt
复制
#loadingOverlay {
  display: flex;
  justify-content: center;
  align-items: center;
}

3. 加载条在移动端显示异常

原因

  • 视口设置问题
  • 移动端触摸事件穿透

解决方案

代码语言:txt
复制
#loadingOverlay {
  /* 防止触摸穿透 */
  touch-action: none;
}

/* 在head中添加视口meta标签 */
<meta name="viewport" content="width=device-width, initial-scale=1.0">

高级应用场景

1. 进度条式加载

代码语言:txt
复制
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);
}

2. AJAX请求全局加载控制

代码语言:txt
复制
$(document).ajaxStart(function() {
  showLoading();
}).ajaxStop(function() {
  hideLoading();
}).ajaxError(function() {
  hideLoading();
  alert('请求失败,请重试');
});

最佳实践

  1. 用户体验
    • 加载时间超过1秒才显示加载条
    • 提供取消操作的按钮
    • 显示预估剩余时间(如果可能)
  • 性能优化
    • 预加载加载条所需的资源
    • 避免复杂的动画效果影响性能
    • 使用CSS动画而非JavaScript动画
  • 可访问性
    • 为屏幕阅读器添加ARIA属性
    • 提供键盘操作支持
    • 确保足够的颜色对比度
代码语言:txt
复制
<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>
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

领券