当前位置:首页 > 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>

列表加载占位

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

vue实现占位加载效果

<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>

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

相关文章

加载jquery

加载jquery

加载 jQuery 的方法 通过 CDN 加载 推荐使用官方或公共 CDN(内容分发网络)加载 jQuery,速度快且稳定。将以下代码添加到 HTML 文件的 <head> 或 <b…

h5所能实现的效果

h5所能实现的效果

H5能实现的效果 H5(HTML5)作为最新的HTML标准,具备强大的功能和丰富的API支持,能够实现多种现代Web应用效果。以下是H5的主要能力分类: 多媒体支持 H5原生支持音频和视频播放,无需…

vue实现气泡效果

vue实现气泡效果

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

vue实现加载条

vue实现加载条

Vue 实现加载条的方法 使用第三方库(如 NProgress) 安装 NProgress 库: npm install nprogress 在 Vue 项目中引入并使用: import…

vue实现检索效果

vue实现检索效果

Vue实现检索功能的方法 在Vue中实现检索功能通常需要结合数据绑定、计算属性和方法。以下是几种常见的实现方式: 基础实现(基于计算属性) <template> <div>…

vue实现无线加载

vue实现无线加载

无限滚动加载的实现 在Vue中实现无限滚动加载(Infinite Scroll)可以通过监听滚动事件或使用现成的库完成。以下是两种常见方法: 使用原生滚动事件监听 通过监听滚动事件判断是否到达页面底…