Spin加载中 - 图1

Spin 加载中

用于页面和区块的加载中状态。

何时使用

页面局部处于等待异步数据或正在渲染过程时,合适的加载动效会有效缓解用户的焦虑。

代码演示

Spin加载中 - 图2

基本用法

一个简单的 loading 状态。

  1. <template>
  2. <a-spin />
  3. </template>

Spin加载中 - 图3

容器

放入一个容器中。

  1. <template>
  2. <div class="example">
  3. <a-spin />
  4. </div>
  5. </template>
  6. <style scoped>
  7. .example {
  8. text-align: center;
  9. background: rgba(0, 0, 0, 0.05);
  10. border-radius: 4px;
  11. margin-bottom: 20px;
  12. padding: 30px 50px;
  13. margin: 20px 0;
  14. }
  15. </style>

Spin加载中 - 图4

自定义描述文案

自定义描述文案。

  1. <template>
  2. <a-spin tip="Loading...">
  3. <a-alert
  4. message="Alert message title"
  5. description="Further details about the context of this alert."
  6. ></a-alert>
  7. </a-spin>
  8. </template>

Spin加载中 - 图5

自定义指示符

使用自定义指示符。

  1. <template>
  2. <a-spin :indicator="indicator" />
  3. </template>
  4. <script lang="ts">
  5. import { LoadingOutlined } from '@ant-design/icons-vue';
  6. import { defineComponent, h } from 'vue';
  7. export default defineComponent({
  8. setup() {
  9. const indicator = h(LoadingOutlined, {
  10. style: {
  11. fontSize: '24px',
  12. },
  13. spin: true,
  14. });
  15. return {
  16. indicator,
  17. };
  18. },
  19. });
  20. </script>

Spin加载中 - 图6

各种大小

小的用于文本加载,默认用于卡片容器级加载,大的用于页面级加载。

  1. <template>
  2. <a-space>
  3. <a-spin size="small" />
  4. <a-spin />
  5. <a-spin size="large" />
  6. </a-space>
  7. </template>

Spin加载中 - 图7

Spin加载中 - 图8

卡片加载中

可以直接把内容内嵌到 Spin 中,将现有容器变为加载状态。

  1. <template>
  2. <a-spin :spinning="spinning">
  3. <a-alert
  4. message="Alert message title"
  5. description="Further details about the context of this alert."
  6. ></a-alert>
  7. </a-spin>
  8. <div class="spin-state">
  9. Loading state:
  10. <a-switch v-model:checked="spinning" />
  11. </div>
  12. </template>
  13. <script lang="ts">
  14. import { defineComponent, ref } from 'vue';
  15. export default defineComponent({
  16. setup() {
  17. const spinning = ref<boolean>(false);
  18. const changeSpinning = () => {
  19. spinning.value = !spinning.value;
  20. };
  21. return {
  22. spinning,
  23. changeSpinning,
  24. };
  25. },
  26. });
  27. </script>
  28. <style scoped>
  29. .spin-state {
  30. margin-top: 16px;
  31. }
  32. </style>

Spin加载中 - 图9

Spin加载中 - 图10

延迟

延迟显示 loading 效果。当 spinning 状态在 delay 时间内结束,则不显示 loading 状态。

  1. <template>
  2. <a-spin :spinning="spinning" :delay="delayTime">
  3. <a-alert
  4. message="Alert message title"
  5. description="Further details about the context of this alert."
  6. ></a-alert>
  7. </a-spin>
  8. <div class="spin-state">
  9. Loading state:
  10. <a-switch v-model:checked="spinning" />
  11. </div>
  12. </template>
  13. <script lang="ts">
  14. import { defineComponent, ref } from 'vue';
  15. export default defineComponent({
  16. setup() {
  17. const spinning = ref<boolean>(false);
  18. const delayTime = 500;
  19. const changeSpinning = () => {
  20. spinning.value = !spinning.value;
  21. };
  22. return {
  23. spinning,
  24. delayTime,
  25. changeSpinning,
  26. };
  27. },
  28. });
  29. </script>
  30. <style scoped>
  31. .spin-state {
  32. margin-top: 16px;
  33. }
  34. </style>

API

参数说明类型默认值
delay延迟显示加载效果的时间(防止闪烁)number (毫秒)-
indicator加载指示符vNode | slot-
size组件大小,可选值为 small default largestring‘default’
spinning是否为加载中状态booleantrue
tip当作为包裹元素时,可以自定义描述文案string-
wrapperClassName包装器的类属性string-

静态方法

  • Spin.setDefaultIndicator({indicator}) 同上 indicator,你可以自定义全局默认元素

    1. import { h } from 'vue';
    2. Spin.setDefaultIndicator({
    3. indicator: h('i', { class: 'anticon anticon-loading anticon-spin ant-spin-dot' }),
    4. });