当前位置:首页 > VUE

vue实现占位加载效果

2026-02-24 05:24:43VUE

使用骨架屏(Skeleton Screen)

骨架屏是一种常见的占位加载效果,通过灰色块状区域模拟内容布局。

<template>
  <div class="skeleton-container">
    <div class="skeleton-item" v-for="i in 5" :key="i"></div>
  </div>
</template>

<style>
.skeleton-container {
  width: 100%;
}
.skeleton-item {
  height: 20px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  margin-bottom: 10px;
  animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
</style>

使用v-if和加载状态

结合v-if指令和加载状态变量控制占位与真实内容的切换。

<template>
  <div>
    <div v-if="loading" class="placeholder">
      <!-- 占位内容 -->
    </div>
    <div v-else>
      <!-- 真实内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loading: true
    }
  },
  mounted() {
    setTimeout(() => {
      this.loading = false
    }, 2000)
  }
}
</script>

内容渐显动画

通过CSS过渡效果实现内容加载后的平滑显示。

<template>
  <div :class="{ 'fade-in': !loading }">
    <!-- 内容区域 -->
  </div>
</template>

<style>
.fade-in {
  animation: fadeIn 0.5s ease-in;
}
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
</style>

图片懒加载占位

为图片加载设置占位背景和加载动画。

<template>
  <div class="image-placeholder">
    <img 
      :src="imageUrl" 
      @load="handleLoad"
      v-show="!loading"
    >
  </div>
</template>

<style>
.image-placeholder {
  position: relative;
  background: #f5f5f5;
  overflow: hidden;
}
.image-placeholder::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, #eee 8%, #ddd 18%, #eee 33%);
  background-size: 800px 100%;
  animation: shimmer 1.5s infinite linear;
}
</style>

列表加载占位

为列表数据加载设计专门的占位效果。

<template>
  <ul>
    <li v-for="item in items" :key="item.id">
      <!-- 真实内容 -->
    </li>
    <li v-if="loading" class="list-placeholder" v-for="n in 3" :key="'ph-'+n">
      <div class="ph-row">
        <div class="ph-avatar"></div>
        <div class="ph-content">
          <div class="ph-line"></div>
          <div class="ph-line"></div>
        </div>
      </div>
    </li>
  </ul>
</template>

<style>
.list-placeholder {
  padding: 12px;
}
.ph-row {
  display: flex;
}
.ph-avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: #eee;
  margin-right: 12px;
}
.ph-line {
  height: 12px;
  background: #eee;
  margin-bottom: 8px;
  border-radius: 4px;
}
.ph-line:last-child {
  width: 80%;
}
</style>

vue实现占位加载效果

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

相关文章

vue实现气泡效果

vue实现气泡效果

实现气泡效果的方法 在Vue中实现气泡效果可以通过CSS动画、第三方库或自定义组件完成。以下是几种常见方法: 使用纯CSS动画 通过CSS的@keyframes和transform属性创建气泡上升…

vue实现tag效果

vue实现tag效果

实现基本标签结构 使用 Vue 的模板语法创建标签容器和单个标签元素。通过 v-for 动态渲染标签列表,结合 v-bind:key 确保渲染性能。 <template> &l…

vue加载实现分页

vue加载实现分页

Vue 实现分页加载的方法 使用 Element UI 的分页组件 安装 Element UI 后,可以直接使用其分页组件。在模板中添加分页组件,并绑定相关事件和数据。 <template&g…

vue实现触底加载

vue实现触底加载

触底加载的实现方法 在Vue中实现触底加载功能,可以通过监听滚动事件或使用Intersection Observer API来实现。以下是两种常见的方法: 监听滚动事件 在组件中监听滚动事件,计算…

vue实现玻璃效果

vue实现玻璃效果

实现玻璃效果的方法 在Vue中实现玻璃效果(毛玻璃或磨砂玻璃)可以通过CSS的backdrop-filter属性结合Vue的动态样式绑定来实现。以下是具体步骤: 使用CSS backdrop-fi…

react如何延迟加载

react如何延迟加载

延迟加载的实现方法 在React中实现延迟加载(Lazy Loading)通常指按需加载组件或资源,以提升初始页面加载性能。以下是几种常见方法: 使用React.lazy和Suspense Reac…