Vue3中封装骨架屏的效果

前言

骨架屏就是在页面数据尚未加载前先给用户展示出页面的大致结构,直到请求数据返回后再渲染页面,补充进需要显示的数据内容。常用于文章列表、动态列表页等相对比较规则的列表页面。 今天我们就讲一下,如何在Vue3中封装骨架效果

为什么需要骨架屏?

  • 当用户刚打开网页的时候,后台还没有返回数据,页面没有办法渲染。
  • 如果用户正好网络状态不是很好,如果页面什么都不显示的话,用户极有可能直接选择退出了。
  • 骨架屏可以起到一个占位的作用,用户看到后就能知道此处有内容正在加载。

二、如何封装?

通过插件的方式,注册为全局组件。
类似elementUIvant等组件库中,都有骨架屏的效果展示,不太理解的小伙伴儿可以去看看。
element官网:骨架屏(PC端)
vant官网:骨架屏(移动设备)

1. 准备组件

src/components文件夹中新建一个skeleton.vue的文件:
代码如下(实例)

<template>
  <div class="xtx-skeleton" :style="{width,height}" :class="{shan:animated}">
    <!-- 1 盒子-->
    <div class="block" :style="{backgroundColor:bg}"></div>
    <!-- 2 闪效果 xtx-skeleton 伪元素 --->
  </div>
</template>
<script>
export default {
     
  name: 'XtxSkeleton',
  // 使用的时候需要动态设置 高度,宽度,背景颜色,是否闪下
  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">
.xtx-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<
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在纯生 Vue 封装使用骨架可以通过以下步骤实现: 1. 创建一个骨架组件 Skeleton.vue,该组件包含需要展示骨架的元素和动画效果。 ``` <template> <div class="skeleton"> <div class="skeleton-item" v-for="i in 3" :key="i"></div> </div> </template> <style> .skeleton { display: flex; align-items: center; justify-content: center; } .skeleton-item { width: 50px; height: 50px; margin: 0 10px; background-color: #ccc; border-radius: 50%; animation: pulse 1.2s ease-in-out infinite alternate; } @keyframes pulse { from { opacity: 0.6; } to { opacity: 1; transform: scale(1.1); } } </style> ``` 2. 在需要展示骨架的组件引入 Skeleton.vue 组件,并添加一个 Boolean 类型的数据 isLoading,用于控制展示骨架或实际数据。 ``` <template> <div> <h1>{{title}}</h1> <Skeleton v-if="isLoading" /> <div v-else> <!-- 展示实际数据 --> </div> </div> </template> <script> import Skeleton from './Skeleton.vue' export default { components: { Skeleton }, data() { return { isLoading: true, // 实际数据 } }, mounted() { // 获取实际数据 this.getData() }, methods: { getData() { // 发送请求获取数据 // ... // 数据请求完成后关闭骨架 this.isLoading = false } } } </script> ``` 3. 在 Skeleton.vue 组件可以根据实际需求进行自定义,例如添加不同的动画效果、修改元素样式等。 通过以上步骤可以在纯生 Vue 封装使用骨架,可以优化用户体验,提升页面加载速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白在线学前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值