CSS loadingは画面をロードしています。

3947 ワード

バックグランドのajaxが長い時間を要してロードする時、ユーザーにヒントを与える必要があって、さもなくばユーザーはあなたが何をしていますかを知らないかもしれなくて、スクリーンは反応がありません。
例えばスクリーンにいくつかの変化の小さいボールを表示します。http://kevinqq.herokuapp.com/bootstrap/manage/logs?page=1
https://tianya.herokuapp.com/articles/ty556242?page=1
CSS
.loading-overlay {
	content: "";
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 1000;
	opacity: .8;
	background: rgba(0, 0, 0, 0.1);
	transition: all .6s;
}

.sk-three-bounce {
	position: absolute;
	top: 60%;
	left: 48%;
  opacity: .8;
}

.sk-three-bounce .sk-child {
	width: 20px;
	height: 20px;
	background-color: salmon;
	border-radius: 100%;
	display: inline-block;
	-webkit-animation: sk-three-bounce 1.4s ease-in-out 0s infinite both;
	animation: sk-three-bounce 1.4s ease-in-out 0s infinite both;
}

.sk-three-bounce .sk-bounce1 {
	-webkit-animation-delay: -0.32s;
	animation-delay: -0.32s;
}

.sk-three-bounce .sk-bounce2 {
	-webkit-animation-delay: -0.16s;
	animation-delay: -0.16s;
}

.sk-three-bounce .sk-bounce3 {
	-webkit-animation-delay: -0.08s;
	animation-delay: -0.08s;
}
@-webkit-keyframes sk-three-bounce {
	0%,
	80%,
	100% {
		-webkit-transform: scale(0);
		transform: scale(0);
	}
	40% {
		-webkit-transform: scale(1);
		transform: scale(1);
	}
}

@keyframes sk-three-bounce {
	0%,
	80%,
	100% {
		-webkit-transform: scale(0);
		transform: scale(0);
	}
	40% {
		-webkit-transform: scale(1);
		transform: scale(1);
	}
}
HTML

Loading demo

http://codepen.io/anon/pen/GNKdOB

page 1 2 3 ... 10




training Demo:

http://codepen.io/anon/pen/GNKdOB


实际应用:

使用 jQuery/Vue等 Javascript,在后台访问(ajax)或其它耗时操作时,显示/隐藏即可


Vue HTML:

  
            
  • Vue script:
    var vm = new Vue({
        el: '#vm',
        data: {
            table: location.pathname.split('/').pop(),
            items: [],
            page: null,
            loading: false,
            models: {
                'users': {'name': '  ', 'email': '    '},
    
            },
        },
        methods: {
             getItemsByPage: function  (page, size) {
                this.loading = true;
                this.$nextTick(function () {    //      :               DOM
    //                this.loading = true;
    //                console.log('now is loading:'+this.loading) // => 'updated'
                  })
                var self = this;
                getJSON('/api/' + this.table, {
                    page: page || '1',
                    size: size || '10'
                }, function (err, data) {
                    self.items = data.items;
                    self.page = data.page;
                    self.loading = false; //    loading
    
                });
    
            },
            gotoPage: function (page, back) {
                if (! back) {
                history.pushState({pg_his: page}, "", this.table+"?page="+page);  // /logs?page=3
                }
                return this.getItemsByPage(page, this.page.limit);
            }
        }
    });
    
    ライブDEMO:
    kevinq.heoku.com