使用 Vue 创建一个简单的 Loading 动画

使用 Vue 创建一个简单的 Loading 动画

1. 开始之前

确保

  • 正确安装了 Vue 3
  • 知道如何启动一个新的 Vue 项目(或在项目中使用Vue)
  • 了解 Vue 3 的 Composition API(本文将使用)

2. 设计组件

该组件应该包含三个部分

  • 控制逻辑
  • 旋转的圆圈动画(或其他任何循环动画)
  • 进度条动画

2.1 逻辑部分

我使用 Vue 的 onMounted 生命周期钩子来模拟进度。我的策略是,如果加载仍在进行,则提供虚假的加载进度。

<script setup lang="ts">
import { ref, onMounted } from "vue";
const loading = ref(true);
const wid = ref(5);

// 异步延迟
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));

// 为完成加载时提供假进度
onMounted(async () => {
  await sleep(500);
  if (loading.value) wid.value = 20;

  await sleep(1000);
  if (loading.value) wid.value = 75;

  await sleep(2000);
  if (loading.value) wid.value = 95;
});

// 完成加载时一步到位
document.onreadystatechange = async () => {
  // 当文档完全加载完成
  if (document.readyState === "complete") {
    const loadingElement = document.getElementById("loading")!;
    const mainContent = document.getElementById("main-container")!;

    // 停止加载
    loading.value = false;
    wid.value = 100;

    // 显示正常页面
    await sleep(1000);
    loadingElement.style.opacity = "0";
    document.body.style.background = "";
    mainContent.style.display = "";

    // 删除 loading 元素
    await sleep(1000);
    loadingElement.remove();
  }
};
</script>

2.2 模板部分

<template>
  <div id="loading">
    <!-- 转动加载 -->
    <div class="load">
      <hr />
      <hr />
      <hr />
      <hr />
    </div>
    <!-- 进度条 -->
    <div class="progress">
      <div class="progress-value" :style="{ width: wid + '%' }"></div>
    </div>
  </div>
</template>

2.3 样式部分


版权声明

版权声明:加载动画修改自 TrafCodrin Pavel,在 MIT 许可下使用。

效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值