rails6, jqueryでスピナの実装

rails

※プロモーションページが含まれる場合があります

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とかと連動しているかは下記に書いてある

Rails で JavaScript を使用する - Railsガイド
RailsビルトインのAjax/JavaScriptについて解説します。

コメント

タイトルとURLをコピーしました