vue加载中loading提示信息(iView Spin)

场景

在一些按钮的点击操作中,假如没有限制,用户多次点击,会向后台发送多次请求。

还有一种情况是:当页面加载时,假如数据没有加载完成,此时为了防止用户进行操作,会显示一个遮罩:加载中...。这个操作和上面差不多,只是触发方式不同,一个是在生命周期中触发,一个是通过用户点击触发

实现

方式一 iview-遮罩loading

html:

<Spin fix v-show="isSpinShow">
    <Icon type="load-c" size="30" class="demo-spin-icon-load"></Icon>
    <div>Loading...</div>
</Spin>
<div @click="sendRequest">发送请求</div>

css:

/* 旋转效果 */
.demo-spin-icon-load{
    animation: ani-demo-spin 1s linear infinite;
}
@keyframes ani-demo-spin {
   from { transform: rotate(0deg);}
   50% { transform: rotate(180deg);}
   to { transform: rotate(360deg);}
}
/* 假如内容过长,一屏放不下,滚动条下拉覆盖不全 */
.ivu-spin-fix {
    position: fixed;
}

js:

data () {
    return {
        isSpinShow: false,
    }
},  
methods: {
    sendRequest() {
        // 假如有验证,在一系列验证之后
        if (this.isSpinShow === false) {
            this.isSpinShow = true
            axios.get('/sendRequest').then((res) => {
                if (res.status === 200) {
                    this.isSpinShow = false
                }
            }).catch(() => {
                this.isSpinShow = false
            })
        }        
    }
} 

方式二 iview-按钮loading

html:

<Button type="primary" :loading="isBtnLoading" @click="sendRequest">发送请求</Button>

js:

data () {
    return {
        isBtnLoading: false,
    }
},  
methods: {
    sendRequest() {
        // 假如有验证,在一系列验证之后
        if (this.isBtnLoading === false) {
            this.isBtnLoading= true
            axios.get('/sendRequest').then((res) => {
                if (res.status === 200) {
                    this.isBtnLoading= false
                }
            }).catch(() => {
                this.isBtnLoading= false
            })
        }        
    }
}

当你使用了遮罩的方式,并且在向后台发送请求之前进行了验证,验证提示是以Message弹窗显示的,当用户多次点击时,会重复出现多次提示信息。

html:

<Button type="primary" :loading="isBtnLoading" @click="sendRequest">发送请求</Button>

js:

data () {
    return {
        isBtnLoading: false,
    }
},  
methods: {
    sendRequest() {
        // 在方法的最顶部设置,防止多次弹出相同提示信息
        this.isBtnLoading = true
        setTimeout(() => {
            this.isBtnLoading = false
        }, 2000)

        axios.get('/sendRequest').then((res) => {
            if (res.status === 200) {

            }
        }).catch(() => {

        })
    }
} 

问题

css样式:弹窗遮罩层在拉滚动条发现遮罩层没铺满屏幕
解决方式:把absolute换成fixed
iview样式源码:

.ivu-spin-fix {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 8;
    width: 100%;
    height: 100%;
    background-color: hsla(0,0%,100%,.9);
}

更改为position: fixed;
自己写遮罩的话,原理也是相同。

网站导航

网站导航

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,588评论 1 45
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,861评论 25 708
  • 我想,用最华丽的言语 记录你微笑的样子 然而 我引以为傲的文笔 却在你的面前苍白了诗句…… 我想,用斑斓的画笔 描...
    白晓轻阅读 326评论 1 1
  • 端午节也叫粽子节,是我国传统节日,至今已有2000多年的历史。 据《史记》记载,公元前278年,秦军攻破楚国京都。...
    无限遐思阅读 1,055评论 0 1
  • 昨天晚上,在瓦特分享完耕地模型后,大家开始关于创新的讨论。大家讨论的挺热烈,每个人对创新有不同的理解。我认为的创新...
    阿达菇凉笑点滴阅读 355评论 0 1