温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Vue中怎么实现一个全局loading组件

发布时间:2021-07-09 15:08:19 阅读:176 作者:Leah 栏目:web开发
Vue开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

Vue中怎么实现一个全局loading组件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

loading.js:

import './loading.css'
 let Loading = {}
// 避免重复install,设立flag
Loading.installed = false
Loading.install = function (Vue) {
 if (Loading.installedreturn
 Vue.prototype.$loading = {}
 Vue.prototype.$loading.show = () => {
 // 如果页面有loading则不继续执行
 if (document.querySelector('#vue-loading')) return
 // 1、创建构造器,定义loading模板
 let LoadingTip = Vue.extend({
  template`<div id="vue-loading">
     <div class="loader"></div>
     </div>`
 })
 // 2、创建实例,挂载到文档以后的地方
 let tpl = new LoadingTip().$mount().$el
 // 3、把创建的实例添加到body中
 document.body.appendChild(tpl)
 // 阻止遮罩滑动
 document.querySelector('#vue-loading').addEventListener('touchmove'function (e) {
  e.stopPropagation()
  e.preventDefault()
 })
 Loading.installed = true
 }
 Vue.prototype.$loading.hide = () => {
 let tpl = document.querySelector('#vue-loading')
 document.body.removeChild(tpl)
 }
}
export default Loading

  loading.css:

#vue-loading {
 width100%;
 height100%;
 position: absolute;
 left0;
 top0
}
.loader {
 position: relative;
 width2.5em;
 height2.5em;
 transformrotate(165deg);
}
.loader:before.loader:after {
 content'';
 position: absolute;
 top50%;
 left50%;
 display: block;
 width0.5em;
 height0.5em;
 border-radius0.25em;
 transformtranslate(-50%, -50%);
}
.loader:before {
 animation: before 2s infinite;
}
.loader:after {
 animation: after 2s infinite;
}
@keyframes before {
 0% {
 width0.5em;
 box-shadow1em -0.5em rgba(22520980.75), -1em 0.5em rgba(1112022200.75);
 }
 35% {
 width2.5em;
 box-shadow0 -0.5em rgba(22520980.75), 0 0.5em rgba(1112022200.75);
 }
 70% {
 width0.5em;
 box-shadow: -1em -0.5em rgba(22520980.75), 1em 0.5em rgba(1112022200.75);
 }
 100% {
 box-shadow1em -0.5em rgba(22520980.75), -1em 0.5em rgba(1112022200.75);
 }
}
@keyframes after {
 0% {
 height0.5em;
 box-shadow0.5em 1em rgba(611841430.75), -0.5em -1em rgba(233169320.75);
 }
 35% {
 height2.5em;
 box-shadow0.5em 0 rgba(611841430.75), -0.5em 0 rgba(233169320.75);
 }
 70% {
 height0.5em;
 box-shadow0.5em -1em rgba(611841430.75), -0.5em 1em rgba(233169320.75);
 }
 100% {
 box-shadow0.5em 1em rgba(611841430.75), -0.5em -1em rgba(233169320.75);
 }
}
/**
 * Attempt to center the whole thing!
 */
html,
body {
 height100%;
}
.loader {
 position: absolute;
 topcalc(50% - 1.25em);
 leftcalc(50% - 1.25em);
}

  这样就可以直接在组件里面手动调用啦!

  调用方法: this.$loading.show(),  this.$loading.hide()

  因为这个项目暂时规模很小,就只有注册功能,我直接把调用写在axios请求拦截器里面,每次请求和请求结束都会调用loading,这样就不用在页面里面手动调用啦。

看完上述内容,你们掌握Vue中怎么实现一个全局loading组件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×