骨架屏的使用

基本使用:为了在加载的过程中等待效果更好,封装一个骨架屏组件。(基于vue3和ts)

大致步骤:

  • 需要一个组件,做占位使用。这个占位组件有个专业术语:骨架屏组件。
  • 属性:高,宽,背景,是否有闪动画,是否有淡入淡出动画。
  • 这是一个公用组件,需要全局注册,将来这样的组件建议在vue插件中定义。
  • 使用组件完成左侧分类骨架效果。

封装组件

width,height,bg,animated,fade是从父组件传来的值

  <XtxSkeleton bg="#e4e4e4" :width="306" :height="306" animated fade/>
<script setup lang="ts">
//定义prop接收
const {
  width = "100",
  height = "200",
  bg = "skyblue",
  animated = "true",
  fade = "true",
} = defineProps<{
  width?: number;
  height?: number;
  bg?: string;
  animated?: boolean;
  fade?: boolean;
}>();
</script>

<template>
  <div
    class="xtx-skeleton"
    :style="{ width: width + 'px', height: height + 'px' }"
    :class="{ shan: animated, fade }"
  >
    <!-- 1.盒子 -->
    <div class="block" :style="{ backgroundColor: bg }"></div>
  </div>
  <!-- 闪效果 xtx-skeleton 伪元素 -->
</template>

<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,
      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%;
  }
}

.fade {
  animation: fade 1s linear infinite alternate;
}
@keyframes fade {
  from {
    opacity: 0.2;
  }
  to {
    opacity: 1;
  }
}
</style>

全局注册(插件)

基本使用

const app = createApp(App)
app.component("组件名", 组件对象)

全局组件的使用-插件

// 统一的注册所有的全局组件
import XtxSkeleton from '@/components/XtxSkeleton/XtxSkeleton.vue'
// App 是在vue库中定义好的类型
import { App } from 'vue'
export default {
  install (app: App) {
    app.component('XtxSkeleton', XtxSkeleton)
  }
}

在全局main.js中注册

import XtxUI from './components'
const app = createApp(App)
app.use(XtxUI)

补充:让全局组件而在element-plus中的组件有提示

创建一个global.d.ts

import XtxSkeleton from '@/components/XtxSkeleton/XtxSkeleton.vue'
// 参考:
declare module 'vue' {
  export interface GlobalComponents {
    XtxSkeleton: typeof XtxSkeleton
  }
}
export {}

小结:在TS中定义了全局组件,有固定的套路让它具备提示效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值