vue占位怎么实现
Vue 中实现占位效果的方法
在 Vue 中实现占位效果可以通过多种方式,具体取决于使用场景和需求。以下是几种常见的实现方法:
使用 v-if 和 v-else 控制占位显示
通过条件渲染切换占位符和实际内容。例如在数据加载完成前显示占位图:
<template>
<div>
<div v-if="loading" class="placeholder">
<!-- 占位内容 -->
</div>
<div v-else>
<!-- 实际内容 -->
</div>
</div>
</template>
使用 CSS 实现骨架屏效果
通过纯 CSS 创建骨架屏占位效果,适用于列表、卡片等场景:
<template>
<div class="skeleton-placeholder">
<div class="skeleton-line"></div>
<div class="skeleton-line"></div>
</div>
</template>
<style>
.skeleton-placeholder {
width: 100%;
}
.skeleton-line {
height: 20px;
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
margin-bottom: 10px;
}
@keyframes shimmer {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
</style>
使用第三方库实现高级占位效果

对于更复杂的占位需求,可以使用专门的 Vue 骨架屏库:
-
安装
vue-content-loader:npm install vue-content-loader -
在组件中使用:

<template> <content-loader> <!-- 定义占位图形状 --> <rect x="0" y="0" rx="3" ry="3" width="250" height="10" /> <rect x="0" y="20" rx="3" ry="3" width="220" height="10" /> </content-loader> </template>
图片懒加载占位实现
对于图片加载,可以使用懒加载技术并设置占位图:
<template>
<img
v-lazy="imageUrl"
:src="placeholderImage"
alt="示例图片"
>
</template>
<script>
export default {
data() {
return {
imageUrl: '实际图片URL',
placeholderImage: 'data:image/svg+xml;base64,...' // 基础64编码的占位图
}
}
}
</script>
列表数据加载占位
处理列表数据加载时的占位效果:
<template>
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
</li>
<li v-if="items.length === 0">
<div class="empty-placeholder">暂无数据</div>
</li>
</ul>
</template>
每种方法适用于不同场景,可以根据具体需求选择最合适的实现方式。CSS 骨架屏适合简单场景,而第三方库则提供更多自定义选项和复杂形状的支持。






