当前位置:首页 > 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 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…