当前位置: 首页 > article >正文

Vue实战教程:如何用JS封装一个可复用的Loading组件

在Web开发中,当进行数据请求或处理耗时操作时,为了不让用户感到困惑,通常会显示一个Loading动画。在Vue框架中,封装一个Loading组件可以让我们在不同的页面和组件中重复使用。下面我们就来一步步实现这个功能。

一、创建Loading组件

1、新建Loading组件

首先,在Vue项目中创建一个新的组件Loading.vue

<template>
  <div v-if="visible" class="loading-wrap">
    <div class="loading-content">
      Loading...
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      visible: false
    };
  }
};
</script>

<style scoped>
.loading-wrap {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 9999;
}

.loading-content {
  color: #fff;
  font-size: 16px;
}
</style>

2、添加动画效果

为了让Loading组件更加美观,我们可以添加一些CSS动画效果。以下是添加了一个简单的旋转动画的示例:

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

.loading-content {
  /* 其他样式保持不变 */
  animation: spin 1s linear infinite;
}

二、封装Loading方法

为了方便地在全局使用Loading组件,我们可以将其封装为一个方法,挂载到Vue的原型上。

1、创建loading.js文件

import LoadingComponent from './Loading.vue';

const Loading = {
  install(Vue) {
    const LoadingConstructor = Vue.extend(LoadingComponent);
    const instance = new LoadingConstructor();
    instance.$mount(document.createElement('div'));
    document.body.appendChild(instance.$el);

    Vue.prototype.$loading = {
      show() {
        instance.visible = true;
      },
      hide() {
        instance.visible = false;
      }
    };
  }
};

export default Loading;

2、在main.js中全局注册Loading组件

import Vue from 'vue';
import Loading from './loading';

Vue.use(Loading);

三、总结

通过以上步骤,我们成功在Vue项目中封装了一个可复用的Loading组件。在实际开发中,我们可以根据项目需求对Loading组件进行样式和功能的扩展,使其更加完善。封装组件是提高代码复用性和维护性的有效手段,希望本文能对你有所帮助。

 


http://www.kler.cn/news/328082.html

相关文章:

  • 基于php的律所管理系统
  • leetcode 513 找到左下角的值
  • SQLite3模块使用详解
  • 使用WebClient 快速发起请求(不使用WebClientUtils工具类)
  • 测试面试题:pytest断言时,数据是符点类型,如何断言?
  • 【Python|接口自动化测试】使用requests发送http请求时添加headers
  • 【LeetCode】每日一题 2024_9_27 每种字符至少取 K 个(双指针)
  • Android 安装应用-提交阶段之后剩下的操作
  • uniapp生物识别示例(人脸识别、指纹识别)
  • 【docker】docker常见命令
  • 动态分配内存
  • Gin框架简易搭建(3)--Grom与数据库
  • 归并排序【C语言版-笔记】
  • Unreal 实现建造游戏|地面交互shader
  • 06.C/C++内存管理
  • 【数据库】MongoDB 用户权限与数据之间的关系详解
  • Android studio配置AVD虚拟机
  • 【60天备战2024年11月软考高级系统架构设计师——第33天:云计算与大数据架构——大数据处理框架的应用场景】
  • 关于Java中的List<User>如何进行深拷贝
  • 贝锐蒲公英工业物联方案:助力美的智慧楼宇全球布局
  • Leetcode 611. 有效三角形的个数
  • 前端面试题(八)
  • 音视频入门基础:FLV专题(7)——Tag header简介
  • 【STM32单片机_(HAL库)】4-1【定时器TIM】定时器中断点灯实验
  • 【漏洞复现】JeecgBoot 积木报表 queryFieldBySql sql注入漏洞
  • 【进阶OpenCV】 (2)--Harris角点检测
  • 衡水中学资料大全-重构版(状元、学霸笔记)
  • .NET MAUI(.NET Multi-platform App UI)下拉选框控件
  • UE5: Content browser工具编写02
  • 【抽代复习笔记】29-群(二十三):生成子群的两道例题及子群陪集的定义