vue中骨架屏实现
时间: 2023-09-11 14:07:44 浏览: 124
在Vue中,可以使用第三方库vue-skeleton-webpack-plugin来实现骨架屏。以下是一个简单的示例:
1. 安装vue-skeleton-webpack-plugin库:
```bash
npm install vue-skeleton-webpack-plugin --save-dev
```
2. 在vue.config.js中配置插件:
```js
const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');
module.exports = {
configureWebpack: {
plugins: [
new SkeletonWebpackPlugin({
webpackConfig: require('path/to/your/webpack.config'),
quiet: true,
minimize: true,
router: {
mode: 'hash',
routes: [
{ path: '/', skeletonId: 'skeleton-home' },
{ path: '/about', skeletonId: 'skeleton-about' },
]
}
})
]
}
}
```
这里配置了插件的相关选项,包括webpackConfig(指定webpack配置文件)、quiet(是否开启静默模式)、minimize(是否压缩骨架屏代码)和router(指定骨架屏对应的路由信息)等。
3. 在组件中使用骨架屏:
```vue
<template>
<div>
<div v-if="$skeletonId === 'skeleton-home'">
<SkeletonHome />
</div>
<div v-else>
<!-- 实际内容 -->
</div>
</div>
</template>
<script>
import SkeletonHome from '@/components/SkeletonHome.vue';
export default {
components: {
SkeletonHome
}
}
</script>
```
这里使用了$v-skeleton-id指令来判断当前组件是否需要显示骨架屏,如果需要,则渲染对应的骨架屏组件SkeletonHome。
在SkeletonHome组件中,可以自定义骨架屏的样式和内容,例如:
```vue
<template>
<div class="skeleton-home">
<div class="skeleton-header"></div>
<div class="skeleton-content">
<div class="skeleton-item"></div>
<div class="skeleton-item"></div>
<div class="skeleton-item"></div>
</div>
</div>
</template>
<style scoped>
.skeleton-home {
background-color: #f2f2f2;
border-radius: 5px;
padding: 20px;
}
.skeleton-header {
height: 50px;
width: 100%;
background-color: #ddd;
border-radius: 5px;
margin-bottom: 20px;
}
.skeleton-content {
display: flex;
flex-direction: column;
}
.skeleton-item {
height: 20px;
width: 100%;
background-color: #ddd;
border-radius: 5px;
margin-bottom: 10px;
}
</style>
```
这里的骨架屏和之前的示例很类似,只是把HTML和CSS放到了组件中。在实际使用中,可以根据不同的需求和布局进行调整。
阅读全文