当前位置:首页 > VUE

vue实现伪加载列表

2026-01-23 13:39:10VUE

Vue 实现伪加载列表

在 Vue 中实现伪加载列表(即模拟数据加载的列表)可以通过以下方法完成。伪加载通常用于展示加载动画或占位内容,提升用户体验。

使用 v-for 和条件渲染

通过 v-for 渲染列表数据,结合 v-ifv-show 控制加载状态的显示。

vue实现伪加载列表

<template>
  <div>
    <div v-if="loading" class="loading-placeholder">
      <!-- 加载占位符 -->
      <div v-for="i in 5" :key="i" class="placeholder-item"></div>
    </div>
    <ul v-else>
      <li v-for="item in list" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loading: true,
      list: []
    };
  },
  mounted() {
    // 模拟异步加载
    setTimeout(() => {
      this.list = [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ];
      this.loading = false;
    }, 2000);
  }
};
</script>

<style>
.loading-placeholder {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.placeholder-item {
  height: 50px;
  background: #f0f0f0;
  border-radius: 4px;
  animation: pulse 1.5s infinite;
}

@keyframes pulse {
  0% { opacity: 0.6; }
  50% { opacity: 1; }
  100% { opacity: 0.6; }
}
</style>

使用骨架屏(Skeleton Loading)

骨架屏是一种更优雅的伪加载方式,通过预定义的占位样式模拟内容结构。

<template>
  <div>
    <div v-if="loading" class="skeleton-container">
      <div class="skeleton-item" v-for="i in 3" :key="i"></div>
    </div>
    <div v-else>
      <div v-for="item in list" :key="item.id" class="content-item">
        {{ item.name }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loading: true,
      list: []
    };
  },
  mounted() {
    setTimeout(() => {
      this.list = [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ];
      this.loading = false;
    }, 1500);
  }
};
</script>

<style>
.skeleton-container {
  width: 100%;
}

.skeleton-item {
  height: 60px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  margin-bottom: 10px;
  border-radius: 4px;
  animation: shimmer 1.5s infinite;
}

@keyframes shimmer {
  to {
    background-position: -200% 0;
  }
}

.content-item {
  padding: 15px;
  border: 1px solid #eee;
  margin-bottom: 10px;
}
</style>

使用第三方库

若需更复杂的伪加载效果,可以使用第三方库如 vue-content-loader

vue实现伪加载列表

安装:

npm install vue-content-loader

示例:

<template>
  <div>
    <content-loader v-if="loading" :speed="2" primaryColor="#f3f3f3" secondaryColor="#ecebeb">
      <rect x="0" y="0" rx="3" ry="3" width="100%" height="20" />
      <rect x="0" y="30" rx="3" ry="3" width="80%" height="20" />
      <rect x="0" y="60" rx="3" ry="3" width="60%" height="20" />
    </content-loader>
    <div v-else>
      <div v-for="item in list" :key="item.id">{{ item.name }}</div>
    </div>
  </div>
</template>

<script>
import { ContentLoader } from 'vue-content-loader';

export default {
  components: { ContentLoader },
  data() {
    return {
      loading: true,
      list: []
    };
  },
  mounted() {
    setTimeout(() => {
      this.list = [
        { id: 1, name: 'Loaded Item 1' },
        { id: 2, name: 'Loaded Item 2' }
      ];
      this.loading = false;
    }, 2000);
  }
};
</script>

关键点总结

  • 条件渲染:通过 v-ifv-show 切换加载状态与真实内容。
  • 动画效果:使用 CSS 动画(如 pulseshimmer)增强占位符的视觉效果。
  • 第三方库vue-content-loader 提供更灵活的占位符设计能力。

以上方法可根据实际需求选择或组合使用。

标签: 加载列表
分享给朋友:

相关文章

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象进行渲染。以下是几种常见的实现方式: 基础列表渲染 通过 v-for 指令遍历数组,动态生成列表项。 &…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 在模板中通过 v-if 或 v-show 控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,而 v-show 仅…

vue实现功能列表

vue实现功能列表

Vue 实现功能列表的方法 在 Vue 中实现功能列表通常涉及数据绑定、列表渲染、事件处理和状态管理。以下是几种常见的方法: 数据驱动列表渲染 使用 v-for 指令可以轻松实现列表渲染。假设有一个…

vue实现图片加载

vue实现图片加载

Vue 实现图片加载的方法 在 Vue 中实现图片加载可以通过多种方式,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind 动态绑定图片路径,可以灵活地加载本地或远程图片。…

vue实现触底加载

vue实现触底加载

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

vue实现无线加载

vue实现无线加载

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