Vue2加载中(Spin)

简介: 这是一篇介绍如何在 Vue3 中实现加载中(Spin)效果的文章。Spin 组件支持自定义是否显示加载状态(默认为 `true`)以及描述文案(默认为空)。文章详细展示了如何创建 `Spin.vue` 组件,并提供了样式和脚本代码。此外,还介绍了如何在页面中引用并使用该组件。![示例动图](https://i-blog.csdnimg.cn/blog_migrate/a5c029a38e7385264e4aa77ca47cf69c.gif)

可自定义传入以下属性:

  • 是否为加载中状态(spinning),默认为true
  • 描述文案(tip),默认为空

效果图如下:

a5c029a38e7385264e4aa77ca47cf69c.gif

①创建Spin.vue组件:

<template>
  <div class="m-spin-wrap">
    <div class="m-spin" v-show="spinning">
      <div class="m-spin-box">
        <div class="m-spin-dot">
          <span class="u-dot-item"></span>
          <span class="u-dot-item"></span>
          <span class="u-dot-item"></span>
          <span class="u-dot-item"></span>
        </div>
        <p class="u-tip" v-show="tip">{
  { tip }}</p>
      </div>
    </div>
    <div :class="['m-spin-content', {'m-spin-mask': spinning}]">
      <slot></slot>
    </div>
  </div>
</template>
<script>
export default {
  name: 'Spin',
  props: {
    spinning: { // 是否为加载中状态
      type: Boolean,
      default: true
    },
    tip: { // 描述文案
      type: String,
      default: ''
    }
  }
}
</script>
<style lang="less" scoped>
@themeColor: #1890ff;
.m-spin-wrap {
  position: relative;
  height: 100%;
}
.m-spin {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  z-index: 9;
  .m-spin-box {
    text-align: center;
    .m-spin-dot {
      position: relative;
      display: inline-block;
      width: 36px;
      height: 36px;
      transform: rotate(45deg);
      -ms-transform: rotate(45deg); /* Internet Explorer */
      -moz-transform: rotate(45deg); /* Firefox */
      -webkit-transform: rotate(45deg); /* Safari 和 Chrome */
      -o-transform: rotate(45deg); /* Opera */
      animation: rotate 1.2s linear infinite;
      -webkit-animation: rotate 1.2s linear infinite;
      @keyframes rotate {
        100% {transform: rotate(405deg);}
      }
      .u-dot-item { // 单个圆点样式
        position: absolute;
        width: 12px;
        height: 12px;
        background: @themeColor;
        border-radius: 50%;
        opacity: .3;
        animation: spinMove 1s linear infinite alternate;
        -webkit-animation: spinMove 1s linear infinite alternate;
        @keyframes spinMove {
          100% {opacity: 1;}
        }
      }
      .u-dot-item:first-child {
        top: 0;
        left: 0;
      }
      .u-dot-item:nth-child(2) {
        top: 0;
        right: 0;
        animation-delay: .4s;
        -webkit-animation-delay: .4s;
      }
      .u-dot-item:nth-child(3) {
        bottom: 0;
        right: 0;
        animation-delay: .8s;
        -webkit-animation-delay: .8s;
      }
      .u-dot-item:last-child {
        bottom: 0;
        left: 0;
        animation-delay: 1.2s;
        -webkit-animation-delay: 1.2s;
      }
    }
    .u-tip {
      font-size: 16px;
      font-weight: 500;
      line-height: 20px;
      color: @themeColor;
      text-align: center;
      padding-top: 10px;
    }
  }
}
.m-spin-content {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 8;
  transition: all .3s;
}
.m-spin-mask {
  opacity: .5;
  background: rgba(255, 255, 255, .4);
}
</style>

②在要使用的页面引用:

<div class="m-area">
    <Spin :tip="tip" :spinning="spinning">
        <p class="spin-content">当 spinning 为 false 时,不显示 loading 状态;当 spinning 为 true 时,延迟`delay`ms时间后,显示 loading 效果;如果 spinning 状态在 `delay` 时间内结束,则不显示 loading 状态;如果不设置 tip 描述文案时,则只有 loading 效果水平垂直居中;如果设置了 tip 描述文案,则 loading 效果和 tip 描述文案一起水平垂直居中。</p>
    </Spin>
</div>
import Spin from '@/components/Spin'
components: {
    Spin
}
data () {
    return {
        tip: '加载中...',
        spinning: true
    }
}
.m-area {
    margin: 60px auto;
    width: 500px;
    height: 200px;
}
相关文章
|
1月前
|
缓存 监控 JavaScript
如何提高 Vue Render 函数的性能?
【10月更文挑战第4天】
25 0
|
3月前
|
JavaScript
Vue3加载中(Spin)
该加载组件 `Spin.vue` 可高度自定义加载状态,包括是否显示加载 (`spinning`)、尺寸 (`size`)、描述文案 (`tip`)、加载指示符 (`indicator`) 及其颜色 (`color`) 和其他细节参数。支持多种加载样式如点、线、圆环等,并允许调整动画速度和初始旋转状态。组件基于 Vue 构建,易于集成到任何项目中,提供丰富的视觉反馈。
Vue3加载中(Spin)
|
3月前
|
JavaScript API 容器
Vue3加载条(LoadingBar)
这是一个基于 Vue 的加载条组件,提供了丰富的自定义选项和方法。通过简单的 API,可以控制加载条的开始、结束及错误状态。支持设置容器类名、样式、颜色等属性,并可通过 `start`、`finish` 和 `error` 方法来触发不同状态。
Vue3加载条(LoadingBar)
|
6月前
|
JavaScript 前端开发
Vue中v-slot的作用是什么?有几种使用方式?
Vue中v-slot的作用是什么?有几种使用方式?
578 0
|
6月前
|
JavaScript 前端开发 API
Vue中的render函数和template渲染原理有什么不同?
Vue中的render函数和template渲染原理有什么不同?
165 0
06-Vue之计数器案例
06-Vue之计数器案例
|
JavaScript 编译器
从 vue 源码看问题 —— vue 初始化都做了什么事?(下)
从 vue 源码看问题 —— vue 初始化都做了什么事?
126 0
|
人工智能 JavaScript
|
缓存 JavaScript
Vue2源码系列-render函数
前面我们对 Vue 实例化的大致流程进行了梳理。现在我们再具体看看初始化中的 initRender 的处理,通过本篇文章可以学习到 Vue 的 render 函数处理逻辑。
|
JavaScript
vue中使用Vue.extend方法仿写一个loading加载中效果
vue中使用Vue.extend方法仿写一个loading加载中效果
171 0