この実装、面倒なら代行します
たとえば、数秒レベルの長い時間がかかるような処理があって、その処理が終わって値が返ってくるまで画面上にローディングアニメーションを表示させておきたいなどのケースがありますね。
そのサンプルとして、外部サイトのAPIをたたいてAPIから値が返ってくるまでローディング状態にするコードをご紹介します。
html部はこのような記述になります。(APIのURLなどはダミーですので動きません、あしからず)
<div id="app"> <div v-cloak> <transition-group name="fade" mode="out-in" > <div v-show="loading" class="loader" key="loader"> <div id="loading"> <div class="loading"> <div class="obj"></div> <div class="obj"></div> <div class="obj"></div> <div class="obj"></div> <div class="obj"></div> <div class="obj"></div> <div class="obj"></div> <div class="obj"></div> </div> </div> </div> <div v-show="!loading" key="notloader"> <button v-on:click="send">送信する</button> <p>返ってきたデータ:{{ returndata }}</p> </div> </transition-group> </div> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script> var vue = new Vue({ el: "#app", data: { loading: false, senddata: 'senddata', returndata: '', }, methods: { send: function() { this.loading = true; axios.post('https://domain.com/api', {data: this.senddata}) .then(response => { this.loading = false; this.returndata = response.data['data'] }) }, } }); </script>
次にCSS。
/* ローディング画面 */ .loader { position: absolute; left: 0; top: 0; z-index: 1080; } #loading { width: 100vw; height: 100vh; transition: all 1s; background: rgba(0,0,0,1.0); position: absolute; left: 0; top: 0; } .loading{ position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); height: 40px; display: flex; align-items: center; } .obj{ width: 5px; height: 40px; background: white; margin: 0 3px; border-radius: 10px; animation: loading 0.8s infinite; } .obj:nth-child(2){ animation-delay: 0.1s; } .obj:nth-child(3){ animation-delay: 0.2s; } .obj:nth-child(4){ animation-delay: 0.3s; } .obj:nth-child(5){ animation-delay: 0.4s; } .obj:nth-child(6){ animation-delay: 0.5s; } .obj:nth-child(7){ animation-delay: 0.6s; } .obj:nth-child(8){ animation-delay: 0.7s; } @keyframes loading{ 0%{ height: 0; } 50%{ height: 40px; } 100%{ height: 0; } }
以上です。
これで、APIから反応が返ってくるまで下のようなローディングアニメーションが表示されるようになります。
お試しあれ。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。