当前位置:首页 > JavaScript

js 实现 loading

2026-04-05 15:14:41JavaScript

实现 Loading 效果的 JavaScript 方法

使用 CSS 动画与 JavaScript 控制

通过 CSS 定义动画效果,JavaScript 控制显示与隐藏:

.loading-spinner {
  width: 40px;
  height: 40px;
  border: 4px solid #f3f3f3;
  border-top: 4px solid #3498db;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
function showLoading() {
  const spinner = document.createElement('div');
  spinner.className = 'loading-spinner';
  spinner.id = 'loadingSpinner';
  document.body.appendChild(spinner);
}

function hideLoading() {
  const spinner = document.getElementById('loadingSpinner');
  if (spinner) {
    spinner.remove();
  }
}

使用 Promise 封装异步操作

将 Loading 状态与异步操作结合:

function withLoading(promise) {
  showLoading();
  return promise.finally(() => {
    hideLoading();
  });
}

// 使用示例
withLoading(fetch('https://api.example.com/data'))
  .then(response => response.json())
  .then(data => console.log(data));

基于 SVG 的高级 Loading 效果

创建更复杂的矢量图形动画:

<svg id="svgLoader" width="100" height="100" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="40" stroke="#eee" stroke-width="8" fill="none"/>
  <circle cx="50" cy="50" r="40" stroke="#3498db" stroke-width="8" 
          stroke-dasharray="251" stroke-dashoffset="251" fill="none">
    <animate attributeName="stroke-dashoffset" from="251" to="0" dur="2s" repeatCount="indefinite"/>
  </circle>
</svg>
function toggleSvgLoading(show) {
  const loader = document.getElementById('svgLoader');
  loader.style.display = show ? 'block' : 'none';
}

进度条式 Loading

实现可显示进度的加载条:

js 实现 loading

<div id="progressContainer" style="width:100%;background:#ddd;">
  <div id="progressBar" style="height:20px;width:0%;background:#4CAF50;"></div>
</div>
let progress = 0;
const interval = setInterval(() => {
  progress += 10;
  document.getElementById('progressBar').style.width = progress + '%';
  if (progress >= 100) clearInterval(interval);
}, 500);

注意事项

  • 确保 Loading 状态在异常情况下也能被清除
  • 考虑添加遮罩层防止用户操作
  • 移动端需注意触摸事件的穿透问题
  • 复杂场景建议使用状态管理库统一管理 Loading 状态

标签: jsloading
分享给朋友:

相关文章

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…