当前位置:首页 > JavaScript

js实现加载效果

2026-02-02 22:26:59JavaScript

使用CSS动画实现加载效果

通过CSS定义旋转动画,结合JavaScript动态添加或移除加载元素。以下是一个简单的旋转加载动画实现:

<style>
.loader {
  border: 5px solid #f3f3f3;
  border-top: 5px solid #3498db;
  border-radius: 50%;
  width: 50px;
  height: 50px;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
</style>

<div id="loader" class="loader" style="display:none;"></div>

<script>
function showLoader() {
  document.getElementById('loader').style.display = 'block';
}

function hideLoader() {
  document.getElementById('loader').style.display = 'none';
}
</script>

使用Promise模拟异步加载

结合Promise和setTimeout模拟异步操作时的加载效果:

js实现加载效果

function simulateAsyncOperation() {
  showLoader();

  return new Promise((resolve) => {
    setTimeout(() => {
      hideLoader();
      resolve('Operation completed');
    }, 2000);
  });
}

// 调用示例
simulateAsyncOperation().then(result => {
  console.log(result);
});

进度条加载效果

实现一个从0%到100%的进度条加载动画:

js实现加载效果

<div id="progress-container" style="width:100%;background:#ddd;">
  <div id="progress-bar" style="width:0%;height:30px;background:#4CAF50;"></div>
</div>

<script>
function startProgress() {
  let progress = 0;
  const bar = document.getElementById('progress-bar');
  const interval = setInterval(() => {
    progress += 1;
    bar.style.width = progress + '%';

    if(progress >= 100) {
      clearInterval(interval);
    }
  }, 50);
}
</script>

骨架屏加载效果

创建内容加载前的占位骨架:

<style>
.skeleton {
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
}

@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
</style>

<div class="skeleton" style="width:100%;height:100px;"></div>

使用第三方库实现复杂效果

引入第三方库如Spin.js创建更丰富的加载动画:

<script src="https://cdnjs.cloudflare.com/ajax/libs/spin.js/2.3.2/spin.min.js"></script>

<div id="spinner-container"></div>

<script>
const opts = {
  lines: 12,
  length: 30,
  width: 14,
  radius: 42,
  scale: 1,
  corners: 1,
  color: '#000',
  fadeColor: 'transparent',
  speed: 1,
  rotate: 0,
  animation: 'spinner-line-fade-quick',
  direction: 1
};

const target = document.getElementById('spinner-container');
const spinner = new Spinner(opts).spin(target);

// 停止旋转
// spinner.stop();
</script>

标签: 加载效果
分享给朋友:

相关文章

vue实现预加载

vue实现预加载

Vue 实现预加载的方法 预加载可以显著提升用户体验,减少页面切换时的等待时间。以下是几种在 Vue 中实现预加载的常见方法: 使用 preload 或 prefetch 标签 在构建工具(如 We…

uniapp 卡片效果

uniapp 卡片效果

uniapp 实现卡片效果的方法 使用 view 和 CSS 样式 通过 view 组件结合 CSS 样式可以快速实现卡片效果。设置圆角、阴影和边距来增强视觉层次感。 <view class=…

vue实现凤凰效果

vue实现凤凰效果

Vue 实现凤凰效果 凤凰效果通常指一种视觉动画,模拟凤凰展翅、火焰燃烧等动态效果。在 Vue 中实现这种效果,可以结合 CSS 动画、Canvas 或第三方动画库(如 GSAP)。以下是几种实现方式…

vue实现开关效果

vue实现开关效果

使用Vue实现开关效果 使用v-model绑定数据 通过v-model绑定一个布尔值来控制开关状态。当用户点击开关时,布尔值会自动更新。 <template> <div cla…

vue实现同步加载

vue实现同步加载

Vue 实现同步加载的方法 在 Vue 中,通常推荐使用异步加载(如 async/await 或 Promise)来优化性能,但在某些场景下可能需要同步加载。以下是几种实现同步加载的方法: 使用 c…

vue 实现滑动效果

vue 实现滑动效果

Vue 实现滑动效果的方法 使用 CSS Transition 通过 Vue 的 v-if 或 v-show 结合 CSS Transition 实现滑动效果。定义一个 CSS 类,利用 transf…