Vue实现网页首屏加载动画、页面内请求数据加载loading

news2024/12/23 18:05:54

博主介绍

📢点击下列内容可跳转对应的界面,查看更多精彩内容!

🍎主页:水香木鱼
🍍专栏:后台管理系统


文章目录

简介:这是一篇有关【Vue实现网页首屏加载动画、页面内请求数据加载loading】的文章,博主用最精简的语言去表达给前端读者们。

四圆点
漩涡
电池状态
请求数据加载loading
齿轮gif图片效果

使用范例:public/index.html【完整代码】

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
    <!-- 加载动画 -->
    <style>html,body,#app{width:100%;height:100%;}.d2-home{background-color:#303133;height:100%;display:flex;position:relative;}.d2-home__main{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);}.d2-home__footer{width:100%;flex-grow:0;text-align:center;padding:1em 0;}.d2-home__loading{height:82px;width:82px;}</style>
    <title><%= webpackConfig.name %></title>
  </head>
  <body>
    <noscript>
      <strong
        >We're sorry but test doesn't work properly without JavaScript enabled.
        Please enable it to continue.</strong
      >
    </noscript>
    <div id="app">
      <!-- 动画节点 -->
      <div class="d2-home__main">
        <img
          class="d2-home__loading"
          src="./image/20180919030732834.gif"
          alt="loading"
        />
      </div>
    </div>
    <!-- built files will be auto injected -->
  </body>
</html>

注意:“加载动画不可与请求数据的组件同时使用!” 否则会出现两个加载效果。

  • 在public/index中使用需要谨慎,因为这是全局加载的。
  • 建议使用loading组件

1、四圆点加载动画

在这里插入图片描述

压缩版样式文件:

<style>#loading-mask{position:fixed;left:0;top:0;height:100%;width:100%;background:#fff;user-select:none;z-index:9999;overflow:hidden}.loading-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-100%)}.loading-dot{animation:antRotate 1.2s infinite linear;transform:rotate(45deg);position:relative;display:inline-block;font-size:64px;width:64px;height:64px;box-sizing:border-box}.loading-dot i{width:22px;height:22px;position:absolute;display:block;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.loading-dot i:nth-child(1){top:0;left:0}.loading-dot i:nth-child(2){top:0;right:0;-webkit-animation-delay:.4s;animation-delay:.4s}.loading-dot i:nth-child(3){right:0;bottom:0;-webkit-animation-delay:.8s;animation-delay:.8s}.loading-dot i:nth-child(4){bottom:0;left:0;-webkit-animation-delay:1.2s;animation-delay:1.2s}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antSpinMove{to{opacity:1}}</style>

动画节点:

在id=“app” 标签内加入

<!-- 动画节点 -->
<div id="loading-mask">
  <div class="loading-wrapper">
     <span class="loading-dot loading-dot-spin"><i></i><i></i><i></i><i></i></span>
  </div>
</div>

2、旋涡加载动画

在这里插入图片描述

压缩版样式文件:

  <style>html,body,#app{height:100%;margin:0px;padding:0px;}.chromeframe{margin:0.2em 0;background:#ccc;color:#000;padding:0.2em 0;}#loader-wrapper{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999999;}#loader{display:block;position:relative;left:50%;top:50%;width:150px;height:150px;margin:-75px 0 0 -75px;border-radius:50%;border:3px solid transparent;border-top-color:#FFF;-webkit-animation:spin 2s linear infinite;-ms-animation:spin 2s linear infinite;-moz-animation:spin 2s linear infinite;-o-animation:spin 2s linear infinite;animation:spin 2s linear infinite;z-index:1001;}#loader:before{content:"";position:absolute;top:5px;left:5px;right:5px;bottom:5px;border-radius:50%;border:3px solid transparent;border-top-color:#FFF;-webkit-animation:spin 3s linear infinite;-moz-animation:spin 3s linear infinite;-o-animation:spin 3s linear infinite;-ms-animation:spin 3s linear infinite;animation:spin 3s linear infinite;}#loader:after{content:"";position:absolute;top:15px;left:15px;right:15px;bottom:15px;border-radius:50%;border:3px solid transparent;border-top-color:#FFF;-moz-animation:spin 1.5s linear infinite;-o-animation:spin 1.5s linear infinite;-ms-animation:spin 1.5s linear infinite;-webkit-animation:spin 1.5s linear infinite;animation:spin 1.5s linear infinite;}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}@keyframes spin{0%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg);}}#loader-wrapper .loader-section{position:fixed;top:0;width:51%;height:100%;background:#1890ff;z-index:1000;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);}#loader-wrapper .loader-section.section-left{left:0;}#loader-wrapper .loader-section.section-right{right:0;}.loaded #loader-wrapper .loader-section.section-left{-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:all 0.7s 0.3s cubic-bezier(0.645,0.045,0.355,1.000);transition:all 0.7s 0.3s cubic-bezier(0.645,0.045,0.355,1.000);}.loaded #loader-wrapper .loader-section.section-right{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);-webkit-transition:all 0.7s 0.3s cubic-bezier(0.645,0.045,0.355,1.000);transition:all 0.7s 0.3s cubic-bezier(0.645,0.045,0.355,1.000);}.loaded #loader{opacity:0;-webkit-transition:all 0.3s ease-out;transition:all 0.3s ease-out;}.loaded #loader-wrapper{visibility:hidden;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:all 0.3s 1s ease-out;transition:all 0.3s 1s ease-out;}.no-js #loader-wrapper{display:none;}.no-js h1{color:#222222;}#loader-wrapper .load_title{font-family:'Open Sans';color:#FFF;font-size:19px;width:100%;text-align:center;z-index:9999999999999;position:absolute;top:60%;opacity:1;line-height:30px;}#loader-wrapper .load_title span{font-weight:normal;font-style:italic;font-size:13px;color:#FFF;opacity:0.5;}</style>

动画节点:

在id=“app” 标签内加入

<!-- 动画节点 -->
<div id="loader-wrapper">
  <div id="loader"></div>
	  <div class="loader-section section-left"></div>
	  <div class="loader-section section-right"></div>
	  <div class="load_title">正在加载,请耐心等待
	  <br>
	  <span>V0.1</span>
  </div>
</div>

3、电池状态加载动画

在这里插入图片描述

压缩版样式:

<style media="screen" type="text/css">#app-cockpit-loading{width:120px;height:40px;position:absolute;font-size:50px;line-height:50px;top:50%;left:50%;transform:translateY(-50%) translateX(-50%);}#app-cockpit-loading span{display:inline-block;width:8px;height:100%;border-radius:4px;background:#1890ff;-webkit-animation:load 1s ease infinite;}@-webkit-keyframes load{0%,100%{height:40px;background:#1890ff;}50%{height:70px;margin:-15px 0;background:lightblue;}}#app-cockpit-loading span:nth-child(2){-webkit-animation-delay:0.2s;}#app-cockpit-loading span:nth-child(3){-webkit-animation-delay:0.4s;}#app-cockpit-loading span:nth-child(4){-webkit-animation-delay:0.6s;}#app-cockpit-loading span:nth-child(5){-webkit-animation-delay:0.8s;}</style>

动画节点:

在id=“app” 标签内加入

<!-- 动画节点 -->
<div id="app-cockpit-loading">
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
</div>

4、请求数据缓慢实现loading提示【推荐】

更多加载图标请移步–网页动态加载(loading)GIF图标

在这里插入图片描述

Ⅰ、封装loading组件【推荐】

loading.vue

<template>
  <div
    class="loadingBox"
    v-show="loading"
    style="background-color: rgba(0, 0, 0, 0.5)"
  >
    <div class="sun-loading"></div>
  </div>
</template>
<script>
export default {
  name: "loading",
  data() {
    return {
      loading: false,
    };
  },
  created() {
    var that = this;
    this.bus.$on("loading", function (data) {
      that.loading = !!data;
    });
  },
};
</script>
<style lang="less" scoped>
.sun-loading {
  width: 45px;
  height: 45px;
  display: block;
  animation: sunLoading 1s steps(12, end) infinite;
  background: transparent
    url("http://www.sucaijishi.com/uploadfile/2018/0919/20180919030731920.gif?imageMogr2/format/jpg/blur/1x0/quality/60");
  background-size: 100%;
  margin: auto;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}
</style>

根文件(App.vue)中使用:

<template>
  <div id="app">
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive" />
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive" />
    <!--loading加载-->
    <Loading></Loading>
    <div style="height: 30px"></div>
  </div>
</template>
<script>
import Loading from "./components/loading.vue";//引用loading组件
export default {
  components: {
    Loading,
  },
};
</script>

main.js中全局注册

Vue.prototype.bus = new Vue();

页面使用:

//获取列表数据
getList() {
  // 显示loading
  this.bus.$emit("loading", true);
  //请求接口
  fetchList({
    keywords: "水香木鱼",
    pageIndex: this.pageIndex,
    pageSize: this.pageSize,
  })
    .then((res) => {
      this.listData = res.data;
      // 关闭loading
      this.bus.$emit("loading", false);
    })
  .catch((error) => {});
},

Ⅱ、通过elementUI实现

在这里插入图片描述

//获取列表数据
getList() {
  // 开始加载loading
  let loading = this.$loading({
    lock: true, //lock的修改符--默认是false
    text: "拼命加载中,请稍候...", //显示在加载图标下方的加载文案
    background: "rgba(0,0,0,0.8)", //遮罩层颜色
    spinner: "el-icon-loading", //自定义加载图标类名
  });
  //请求接口
  fetchList({
    keywords: "水香木鱼",
    pageIndex: this.pageIndex,
    pageSize: this.pageSize,
  })
    .then((res) => {
     this.listData = res.data;
    //关闭loading
    loading.close();
    })
  .catch((error) => {});
},

5、齿轮加载gif效果

在这里插入图片描述
压缩版样式:

<style>html,body,#app{width:100%;height:100%;}.d2-home{background-color:#303133;height:100%;display:flex;position:relative;}.d2-home__main{position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%);}.d2-home__footer{width:100%;flex-grow:0;text-align:center;padding:1em 0;}.d2-home__loading{height:82px;width:82px;}</style>

动画节点:

在id=“app” 标签内加入

<div class="d2-home__main">
  <img
  class="d2-home__loading"
  src="./image/20180919030732834.gif"
  alt="loading"
  />
</div>

相关推荐

⭐Vue实现任意内容展开 / 收起功能组件
⭐Vue实现点击按钮或者图标可编辑输入框
⭐vue-生成二维码【生成、点击输入框内叉号移除生成的二维码、输入框聚焦】
⭐一文图解前端WebSocket 实时通信
⭐前端实现放大镜效果【原生js实现、vue实现】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用html、css制作一个期末作业网站【羽毛球体育运动主题html网页设计】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

sulfo-CY3(Cyanine3) DBCO,磺酸基-花青素CY5二苯并环辛炔,1782950-79-1

中文名&#xff1a;磺酸基-花青素CY3二苯并环辛炔 英文名&#xff1a;Sulfo-Cyanine3 DBCO&#xff0c;Sulfo-Cy3 DBCO CAS&#xff1a;1782950-79-1 分子式&#xff1a;C50H54N4O11S3 性 状&#xff1a;红色粉末 分子量&#xff1a;983.18 Abs/Em Maxima&#xff1a;548/…

Hadoop单个节点的磁盘均衡

hadoop如果一个节点内有新增磁盘或者数据出现在磁盘上不均衡时&#xff0c;需要做磁盘均衡&#xff0c;就是将其他已经写入数据的磁盘均衡到新增加的磁盘上去&#xff0c;大概分为以下三个步骤&#xff0c;计划&#xff0c;执行&#xff0c;查询&#xff1a; 一般默认都开启了磁…

基于NodeJs+Express+Mysql学生社团活动管理系统

开发技术&#xff1a;nodejs express ElementUI layui 开发工具环境&#xff1a;Vscode Mysql 后台登录地址&#xff1a;http://localhost:8080/nodejsr08n1/admin/dist/index.html#/login 管理员账号密码&#xff1a;abo/abo 社团账号密码&#xff1a;账号1/123456 前台地…

JVM内存区域划分

哈喽,又是好久不见呀,今天主要要给大家分享的是JVM的内存区域划分,这个就是纯纯的八股文了呦,但是我依旧还是会尽我最大的努力给友友讲清楚的,快来看看吧. 目录 1.JVM快速扫盲 2.JDK、JRE、JVM的关系 3.JVM内存区域划分 3.1 堆 3.2 java虚拟机栈 3.3 本地方法栈 3.4 程序…

OpenCV学习-P44 角点检测

OpenCV学习-P44 角点检测角点特征Harris和Shi-Tomas算法Harris角点检测Shi-tomas角点检测角点特征 角点是图像很重要的特征&#xff0c;对图像图形的理解和分析有很重要的作用 Harris和Shi-Tomas算法 Harris角点检测 E最大的点即角点&#xff0c;矩阵M决定了E的取值 im…

信息系统项目管理师高级论文如何准备?

如果有项目经验&#xff0c;可以选一个&#xff0c;整理一下项目背景&#xff0c;内容等&#xff0c;使它符合考试的要求。 没有项目经验&#xff0c;就只能多看范文&#xff0c;总结框架&#xff0c;然后再动手写了。 所以&#xff0c;论文一定要提前准备。 2小时内要完成三…

HTML简单的网页制作期末作业【NBA勒布朗詹姆斯篮球明星】HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

大一学生作品《前端框架开发技术》 期末网页制作 HTML+CSS+JavaScript 个人主页网页设计实例

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

UML类图

统一建模语言&#xff08;Unified Modeling Language&#xff0c;UML&#xff09;是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML从目标系统的不同角度出发&#xff0c;可分为用例图、类图、对象图、状态图、活动图、…

实现一个全局事件总线并发布到NPM

前言 Vue2开发过程中&#xff0c;会碰到非父子组件情况&#xff0c;我们大多数会使用Vue提供的自定义实例来解决这个问题&#xff0c;但在Vue3之后就移除了$on/$off/$once/emit 相关API&#xff0c;不再提供自定义实例&#xff0c;而是推荐使用一些第三方库如mitt、tiny-emitt…

第3关:Client连接及状态

ZooKeeper状态以及状态的转换 一个会话从NOT_CONNECTED状态开始&#xff0c;当客户端初始化后转换成CONNECTTING状态&#xff08;箭头1&#xff09;。 当客服端与服务器断开连接&#xff0c;状态转换成CONNECTED状态&#xff08;箭头2&#xff09;。 当客服端与服务器断开连接…

基于xsh的vbs脚本的使用(语法)

一. chr(number)含义 chr(number) 对应列表链接&#xff1a;chr码值对应列表大全_conger3400的博客-CSDN博客 常用举例&#xff1a; chr(3)&#xff1a;CtrlC/退出等待某个执行命令 chr(4)&#xff1a;CtrlD/退出会话 chr(8)&#xff1a;del回退删除一个字符 chr(9)&#xff…

Linux网络管理

文章目录 前言 网卡的存储位置&#xff08;查看网卡&#xff09; NetworkManager服务 查看网络连接状态 配置网卡参数 先备份网卡配置文件&#xff0c;再修改 查看本机的自动获取的IP 编辑网卡配置文件 重启网络服务并查看IP 另一台机器同样的方法进行网络配置&#x…

网络工程师备考1-2章(续)

一:差错控制 (1)奇偶检验 什么意思呢? 如果我们用 奇校验,就是保证传输过来的数据中的1是奇数,如果不是奇数那么说明传输错误。 (所以会增加一位,保证正确的数据的总的1一定是奇数) (2)海明码 什么是海明距离? 两个码字,例如 0 1 0 0 和 0 0 1 0 可以看到这…

人机界面在石油钻井工程中的应用:如何搭建钻井工程参数监测系统?

一、应用背景 石油钻井工程是石油开采过程中最为关键的一个环节&#xff0c;直接决定着石油开采的质量和经济效益&#xff0c;而钻井工程参数的实时监测、分析处理和存储是保证安全、可靠、高效钻井的重要途径。 随着科学技术的飞速进步&#xff0c;尤其是自动化技术的发展&a…

HTML网页设计制作大作业(div+css)---浩瀚天文 (13页有二级菜单)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运用了html5和css3&#xff0c; 采…

MySQL索引及调优回顾

MySQL索引及调优回顾 1.1 &#xff1a;索引诞生的背景是怎样的&#xff1f; 假如数据库表中只有10条记录&#xff0c;我们可以一条条的进行查询。假如有500万条记录呢&#xff0c;从假如还是一条条去查询可能需要的时间就会比较长&#xff0c;此时索引就诞生了。1.2 &#xf…

SSH Keylogger密码抓取

简介 SSH Keylogger终端切换用户记录用户输入的终端信息可获取密码 主要利用strace系统调试工具获取ssh的读写连接的数据&#xff0c;以达到抓取管理员登陆其他机器的明文密码的作用。 Strace strace命令是一个集诊断、调试、统计于一体的工具,常用来跟踪进程执行时的系统调…

flutter 中最详细的继承,多态,接口讲解

flutter 中最详细的继承&#xff0c;多态&#xff0c;接口讲解前言一、继承&#xff08;Extends&#xff09;二、混合 mixins&#xff08;with&#xff09;2.1、最简单的mixin2.2、on 关键字&#xff0c;基于某个类型的mixin2.3、多个mixin2.4、mixin 怎么实现多继承三、接口的…