不管是使用框架,还是不使用任何的框架,我们都不可避免的需要与“加载中……”打交道,刚刚学习了Vuejs自定义组件的写法,就现学现卖,介绍一下吧!

先看一下目录结构,一般情况下,每一个组件都新建一个新的文件夹,里面包含对应的vue文件,和Index.js,如下图:

如果想要像Mint-UI一样,在任一.vue文件中,仅仅使用一个<loading></loading>标签即可使用该组件的话,其实也没有那么的深奥难懂的。

在main.js文件中:

import Loading from "./components/loading/index"
Vue.use(Loading);

 也就两句代码解决,一句是ES6语法引入该loading模块,另一句则是使用use来使用该模块, Vue.use(Loading)

 这种全局组件,其实说起来很像jquery中的自定义插件一样,这里我们所有代码写在./components/loading/index.js文件中:

import LoadingComponent from "./Loading.vue";
export default {
install: function (Vue) {
Vue.component("loading", LoadingComponent)
}
}

  也是两句代码,一句引入 "./Loading.vue", 下一句就是将该组件导出,这里就存在一个关键点:install, 只有使用install了,我们在main.js中,才能够直接use该组件,而install函数默认自带一个参数Vue,也就是我们正在使用的Vue对象,然后定义loading这一组件,也是正常的Vue定义组件的方法: Vue.component("loading", LoadingComponent),这里的“loading”的名称,也就是我们后面使用组件时的标签名称。

  至于该组件长什么样,有什么效果,直接在Loading.vue文件里面定义就可以了,并不受任何其他文件的影响。

  从网上扒下来一个loading的动画效果的示例: 

<template>
<div class="loader">
<div class="loader-inner pacman">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
</template>  
.loader {
box-sizing: border-box;
display: flex;
flex: 0 1 auto;
flex-direction: column;
flex-grow: 1;
flex-shrink: 0;
flex-basis: 25%;
max-width: 25%;
height: 200px;
align-items: center;
justify-content: center;
} .pacman {
position: relative;
}
.pacman > div:nth-child(2) {
-webkit-animation: pacman-balls 1s 0s infinite linear;
animation: pacman-balls 1s 0s infinite linear; }
.pacman > div:nth-child(3) {
-webkit-animation: pacman-balls 1s 0.33s infinite linear;
animation: pacman-balls 1s 0.33s infinite linear; }
.pacman > div:nth-child(4) {
-webkit-animation: pacman-balls 1s 0.66s infinite linear;
animation: pacman-balls 1s 0.66s infinite linear; }
.pacman > div:nth-child(5) {
-webkit-animation: pacman-balls 1s 0.99s infinite linear;
animation: pacman-balls 1s 0.99s infinite linear; }
.pacman > div:first-of-type {
width: 0px;
height: 0px;
border-right: 25px solid transparent;
border-top: 25px solid #399;
border-left: 25px solid #399;
border-bottom: 25px solid #399;
border-radius: 25px;
-webkit-animation: rotate_pacman_half_up 0.5s 0s infinite;
animation: rotate_pacman_half_up 0.5s 0s infinite;
}
.pacman > div:nth-child(2) {
width: 0px;
height: 0px;
border-right: 25px solid transparent;
border-top: 25px solid #399;
border-left: 25px solid #399;
border-bottom: 25px solid #399;
border-radius: 25px;
-webkit-animation: rotate_pacman_half_down 0.5s 0s infinite;
animation: rotate_pacman_half_down 0.5s 0s infinite;
margin-top: -50px;
}
.pacman > div:nth-child(3), .pacman > div:nth-child(4), .pacman > div:nth-child(5), .pacman > div:nth-child(6) {
background-color: #399;
width: 15px;
height: 15px;
border-radius: 100%;
margin: 2px;
width: 10px;
height: 10px;
position: absolute;
-webkit-transform: translate(0, -6.25px);
-ms-transform: translate(0, -6.25px);
transform: translate(0, -6.25px);
top: 25px;
left: 100px;
} @-webkit-keyframes rotate_pacman_half_up {
0% {
-webkit-transform: rotate(270deg);
transform: rotate(270deg); } 50% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } 100% {
-webkit-transform: rotate(270deg);
transform: rotate(270deg); } } @keyframes rotate_pacman_half_up {
0% {
-webkit-transform: rotate(270deg);
transform: rotate(270deg); } 50% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } 100% {
-webkit-transform: rotate(270deg);
transform: rotate(270deg); } } @-webkit-keyframes rotate_pacman_half_down {
0% {
-webkit-transform: rotate(90deg);
transform: rotate(90deg); } 50% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); } 100% {
-webkit-transform: rotate(90deg);
transform: rotate(90deg); } } @keyframes rotate_pacman_half_down {
0% {
-webkit-transform: rotate(90deg);
transform: rotate(90deg); } 50% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); } 100% {
-webkit-transform: rotate(90deg);
transform: rotate(90deg); } } @-webkit-keyframes pacman-balls {
75% {
opacity: 0.7; } 100% {
-webkit-transform: translate(-100px, -6.25px);
transform: translate(-100px, -6.25px); } } @keyframes pacman-balls {
75% {
opacity: 0.7; } 100% {
-webkit-transform: translate(-100px, -6.25px);
transform: translate(-100px, -6.25px); } }

  

Vuejs自定义全局组件--loading的更多相关文章

  1. vue2 自定义全局组件(Loading加载效果)

    vue2 自定义全局组件(Loading加载效果) github地址: https://github.com/ccyinghua/custom-global-component 一.构建项目 vue ...

  2. 07vue 自定义全局组件 通用流程

    1.全局组件的目录 2.loading/index.js import LoadingComp from './Loaiding' const compName=LoadingComp.name // ...

  3. vue自定义全局组件(自定义插件)

    有时候我们在做开发的时候,就想自己写一个插件然后就可以使用自己的插件,那种成就感很强.博主最近研究element-ui和axios的时候,发现他们是自定义组件,但是唯一有一点不同的是,在用elemen ...

  4. VueJS自定义全局和局部指令

    除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令. 使用directive自定义全局指令 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面 ...

  5. 8svg 自定义全局组件

    0.https://www.npmjs.com/package/vue2-svg-icon 直接使用vue2-svg-icon插件 .如果不使用,就使用下面用法 注意:用阿里图标时候,最好都选择#ff ...

  6. 如何自定义一个组件loading

    使用时需要Vue.use()一下

  7. vue 自定义全局组件

  8. 自定义vue全局组件use使用(解释vue.use()的原理)

    我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们就来讲解一下怎么样定义一个全局组件,并解释vue.use()的 ...

  9. 自定义vue全局组件use使用、vuex的使用

    自定义vue全局组件use使用(解释vue.use()的原理)我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们 ...

随机推荐

  1. 查看Linux系统版本信息(转)

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@S-CentOS home]# cat /proc/version Linux version 2.6 ...

  2. Hibernate更新删除数据后,再查询数据依然存在的解决办法

    删除数据后,重新查询了数据库,DB中记录已经删除了,但是数据依然能查询到,网上都说是Hibernate的缓冲问题. 我对session进行了clear,flush,并且在事务和查询中都对session ...

  3. 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

    问题 rds_content = "{}, 执行了变更,sql语句:{}".format(ExecuteTime, sqls) 'ascii' codec can't encode ...

  4. HTML:meta标签使用总结 [转载] [360浏览器 指定极速模式]

    meta标签作用 META标签是HTML标记HEAD区的一个关键标签,提供文档字符集.使用语言.作者等基本信息,以及对关键词和网页等级的设定等,最大的作用是能够做搜索引擎优化(SEO). PS:便于搜 ...

  5. Excel技巧--空白处补零

    当我们有一表格,而表格的空白单元格要补零时,如下图: 那么手动添加零比较麻烦,特别是行数很多时.可以用如下方法: 1.使用“替换”功能: 查找内容为空,替换处填写0,然后点击全部替换即可. 2.使用定 ...

  6. 第一个NDK工具:AddInputsSol

    工具名称:AddInputsSol 系统平台:Windows 7x64 软件平台:Nuke8.0v5x64 基本功能:分别获取AddInputsSol节点上游的framerange信息,点击Rende ...

  7. 【react】---Immutable的基本使用

    一.Immutable简介 Immutable Data 就是一旦创建,就不能再被更改的数据.对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象.Immut ...

  8. GetPostBackEventReference加RaisePostBackEvent实现自定义控件中回调传参

    ; //回调函数,回调参数值:eventArgument        public void RaisePostBackEvent(string eventArgument)        {    ...

  9. Django--bug--ImproperlyConfigured: The SECRET_KEY setting must not be empty.

    Django配置Restframework后,建立用户模型,执行迁移的时候报如下错误: django.core.exceptions.ImproperlyConfigured: The SECRET_ ...

  10. 【springboot】之整合ActiveMQ

    1.引入依赖的jar <parent> <groupId>org.springframework.boot</groupId> <artifactId> ...