rails6でスピナー画面を実装する機会があったので備忘録
css
/* ローディング画面背景 */
.loader-bg {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: 9999;
background-color: rgb(185, 192, 192);
display: flex;
justify-content: center;
align-items: center;
opacity: 0.3;
}
/* ローディングアニメーション */
.loader {
font-size: 10px;
margin: 50px auto;
text-indent: -9999em;
width: 11em;
height: 11em;
border-radius: 50%;
background: #ffffff;
background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
position: relative;
-webkit-animation: load3 1.4s infinite linear;
animation: load3 1.4s infinite linear;
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
}
.loader:before {
width: 50%;
height: 50%;
background: #ffffff;
border-radius: 100% 0 0 0;
position: absolute;
top: 0;
left: 0;
content: ”;
}
.loader:after {
background: rgb(185, 192, 192);
width: 75%;
height: 75%;
border-radius: 50%;
content: ”;
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
@-webkit-keyframes load3 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes load3 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
スピナを発生させたいerbファイルで
<script>
document.body.addEventListener(‘ajax:beforeSend’, function(event) {
$(‘body’).prepend(‘<div class=”loader-bg”> <div class=”loader”></div></div>’);
})
document.body.addEventListener(‘ajax:complete’, function(event) {
$(“.loader-bg”).remove();
$(“.loade”).remove();
})
</script>
以上。
やっていることは
form_withが呼ばれるとajax:beforeSendが発動するので
<div class=”loader-bg”> <div class=”loader”></div></div>
を挿入してスピナ発動。
form_withの通信が完了するとajax:completeが呼ばれるので
$(“.loader-bg”).remove();
$(“.loade”).remove();
で要素を消している
form_withがなんでajax:beforeSendとかと連動しているかは下記に書いてある
コメント