Added loading screen
This commit is contained in:
parent
b45168074c
commit
2817cc5f18
3 changed files with 132 additions and 5 deletions
|
@ -128,6 +128,7 @@ html, body {
|
||||||
font-size: 1.05em;
|
font-size: 1.05em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Splash screen */
|
||||||
.splash {
|
.splash {
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
|
@ -140,3 +141,124 @@ html, body {
|
||||||
font-size: 1.2em;
|
font-size: 1.2em;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.splash .icon {
|
||||||
|
width: 150px;
|
||||||
|
height: 150px;
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.splash .icon img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fade in/out animations */
|
||||||
|
.fade-in {
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
-webkit-animation-duration: 0.5s;
|
||||||
|
animation-fill-mode: both;
|
||||||
|
animation-name: fadeIn;
|
||||||
|
-webkit-animation-name: fadeIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fade-out {
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
-webkit-animation-duration: 0.5s;
|
||||||
|
animation-fill-mode: both;
|
||||||
|
animation-name: fadeOut;
|
||||||
|
-webkit-animation-name: fadeOut;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
0% {opacity: 0;}
|
||||||
|
100% {opacity: 1;}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeOut {
|
||||||
|
0% {opacity: 1;}
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Loading animation */
|
||||||
|
.loading {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 3em;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background: #909090;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon div {
|
||||||
|
position: absolute;
|
||||||
|
top: 33px;
|
||||||
|
width: 13px;
|
||||||
|
height: 13px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #fff;
|
||||||
|
animation-timing-function: cubic-bezier(0, 1, 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon div:nth-child(1) {
|
||||||
|
left: 8px;
|
||||||
|
animation: lds-ellipsis1 0.6s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon div:nth-child(2) {
|
||||||
|
left: 8px;
|
||||||
|
animation: lds-ellipsis2 0.6s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon div:nth-child(3) {
|
||||||
|
left: 32px;
|
||||||
|
animation: lds-ellipsis2 0.6s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon div:nth-child(4) {
|
||||||
|
left: 56px;
|
||||||
|
animation: lds-ellipsis3 0.6s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes lds-ellipsis1 {
|
||||||
|
0% {
|
||||||
|
transform: scale(0);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes lds-ellipsis3 {
|
||||||
|
0% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes lds-ellipsis2 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0, 0);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translate(24px, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -11,17 +11,22 @@
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<div class="splash" v-if="splash">
|
<div class="splash" v-if="splash">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<img src="img/icon.png">
|
<img src="img/icon.png" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div class="app-name">
|
<div class="app-name">
|
||||||
Platypush
|
Platypush
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="loading" v-if="loading">
|
||||||
|
<div class="icon">
|
||||||
|
<div v-for="n in 4" :key="n"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="services">
|
<div class="services">
|
||||||
<div class="no-items" v-if="loading || !Object.keys(services).length">
|
<div class="no-items" v-if="!Object.keys(services).length">
|
||||||
<div class="loading" v-if="loading">Loading...</div>
|
<div class="empty">No Platypush web services found on the network</div>
|
||||||
<div class="empty" v-else>No Platypush web services found on the network</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="service" v-for="(service, i) in services" :key="i" @click="onClick(service)">
|
<div class="service" v-for="(service, i) in services" :key="i" @click="onClick(service)">
|
||||||
|
|
|
@ -43,7 +43,7 @@ new Vue({
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted: function() {
|
mounted: function() {
|
||||||
this.splashScreen(3000)
|
this.splashScreen(2500)
|
||||||
app.startServicesPoll()
|
app.startServicesPoll()
|
||||||
window.setInterval(this.refresh, 500)
|
window.setInterval(this.refresh, 500)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue