前言
有很多时候,我们在浏览网页的时候,因为网络原因,没有办法第一时间看到网页里面的内容,那么骨架屏可以对网页有一个大致的展示。也可以很友好的让用户感知网页正在加载中,一起来看看如何实现骨架屏效果吧
一、为什么需要骨架屏?
- 当用户刚打开网页的时候,后台还没有返回数据,页面没有办法渲染。
- 如果用户正好网络状态不是很好,如果页面什么都不显示的话,用户极有可能直接选择退出了。
- 骨架屏可以起到一个占位的作用,用户看到后就能知道此处有内容正在加载。
二、如何封装?
通过插件的方式,注册为全局组件。
类似elementUI、vant等组件库中,都有骨架屏的效果展示,不太理解的小伙伴儿可以去看看。
element官网:骨架屏(PC端)
vant官网:骨架屏(移动设备)
1. 准备组件
在src/components文件夹下新建skeleton.vue文件
代码如下(示例):
<template>
<div class="skeleton" :style="{width,height}" :class="{shan:animated}">
<!-- 1 盒子-->
<div class="block" :style="{backgroundColor:bg}"></div>
<!-- 2 闪烁效果 skeleton 伪元素 --->
</div>
</template>
<script>
export default {
name: 'Skeleton',
// 使用的时候需要动态设置 高度,宽度,背景颜色,是否闪烁
props: {
bg: {
type: String,
default: '#efefef'
},
width: {
type: String,
default: '100px'
},
height: {
type: String,
default: '100px'
},
animated: {
type: Boolean,
default: false
}
}
}
</script>
<style scoped lang="less">
.skeleton {
display: inline-block;
position: relative;
overflow: hidden;
vertical-align: middle;
.block {
width: 100%;
height: 100%;
border-radius: 2px;
}
}
.shan {
&::after {
content: "";
position: absolute;
animation: shan 1.5s ease 0s infinite;
top: 0;
width: 50%;
height: 100%;
background: linear-gradient(
to left,
rgba(255, 255, 255, 0) 0,
rgba(255, 255, 255, 0.3) 50%,
rgba(255, 255, 255, 0) 100%
);
transform: skewX(-45deg);
}
}
@keyframes shan {
0% {
left: -100%;
}
100% {
left: 120%;
}
}
</style>
2. 注册为组件
在src/components下面新建index.js文件
代码如下(示例): 如果还有其他的全局组件或者函数,也可以在install函数中进行注册
import Skeleton from './library/skeleton'
// vue2.0插件写法要素:导出一个对象,有install函数,默认传入了Vue构造函数,Vue基础之上扩展
// vue3.0插件写法要素:导出一个对象,有install函数,默认传入了app应用实例,app基础之上扩展
export default {
install (app) {
app.component(Skeleton.name, Skeleton)
}
}
3. 注册为插件
在main.js中注册为全局插件
代码如下(示例):
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
+import myUI from './components'
+createApp(App).use(store).use(router).use(myUI).mount('#app')
三、 如何使用?
1. 使用演示
在.vue结尾的文件中
代码如下(示例):
将组件需要的参数传入即可
<template>
<skeleton width="50px" height="20px" animated bg="#999"/>
</template>
<script>
export default {
name: 'App',
setup() {
}
}
</script>
效果演示
2. 应用场景介绍
可以在需要用到的地方,循环生成。等后台数据返回后,将骨架屏组件替换掉即可。
掘金PC端效果
总结
呜呼~