質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Pug

Pug(旧Jade)とは、HTMLを書くためのテンプレートエンジン。タグで囲む必要がないなど記述を省略できるため、HTMLの記述が簡単になります。ファイル分割も可能で、変数やループなど便利な機能も備わっています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4215閲覧

【vue】Vueのコンポーネントを読み込んだタイミングでローディング画面をfadeoutする方法

hasshy

総合スコア102

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Pug

Pug(旧Jade)とは、HTMLを書くためのテンプレートエンジン。タグで囲む必要がないなど記述を省略できるため、HTMLの記述が簡単になります。ファイル分割も可能で、変数やループなど便利な機能も備わっています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/10/30 09:46

編集2018/10/30 09:58

最初はローディング画面を出しておいて、リソースを全て読み終えたらフェードアウトして中身のコンテンツを表示させると言うのをやりたいです。

実行した結果

一瞬で、ローディング画面が消えてしまいフェードが実行されません。

ソースコード

vueで最初に読むmain.jsでは下記のコンポーネントを読み込みます。
v-ifで、data.kvの値をみてリソースを削除します。
その際に、transitionの設定を使ってフェードさせます。

vue

1<template> 2<div id="opning"> 3 <transition name="kv"> 4 <div v-if="! this.$data.kv" id="loading"></div> 5 </transition> 6 <div id="contents"> 7 <p>表示する要素</p> 8 </div> 9</div> 10</template> 11 12<script> 13export default { 14 name='opning', 15 data() { 16 return { 17 kv: 0 18 } 19 }, 20 mounted() { 21 // コンポーネントが作られたタイミング発火 22 console.log('opning created'); 23 this.$data.opning_states.kv = 1 24 } 25} 26 27</script> 28 29<style> 30#opning { 31 width: 100%; 32 height: 100%; 33} 34 35#loading { 36 width: 100%; 37 height: 100%; 38 background-color: #FFF; 39} 40.kv_leave { 41 opacity: 1; 42} 43.kv_leave-to { 44 opacity: 0; 45} 46.kv_leave-active { 47 transition: opacity .5s; 48} 49</style>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

いくつか間違っている部分があるため、動かないようです。

Vue

1<script> 2export default { 3 name='opning', // name: 'opning' です 4 ... 5 mounted() { 6 // コンポーネントが作られたタイミング発火 7 console.log('opning created'); 8 this.$data.opning_states.kv = 1 // opning_statesが存在しません 9 } 10 11} 12</script> 13<style> 14#opning { 15 width: 100%; 16 height: 100%; 17} 18 19#loading { 20 width: 100%; 21 height: 100%; 22 background-color: #FFF; 23} 24 25/* 26以下、命名規則が違います。 27Vueの<transition>コンポーネントに関わるCSSクラスは、`[name]-leave`などで、アンダーバーではなくハイフンでつなぎます。 28*/ 29 30.kv_leave { 31 opacity: 1; 32} 33.kv_leave-to { 34 opacity: 0; 35} 36.kv_leave-active { 37 transition: opacity .5s; 38} 39</style>

補足

問題の解決とは別ですが、念のため書きます。

Vueコンポーネントのデータオブジェクトの各プロパティは、this.kvのように設定されるので、this.$data経由でなくて直接参照できます。
ただし、この動作は「$」「_」で始まるプロパティ名には適用されません。Vueが自動生成するプロパティ名とかぶる危険性があるためです。例えば、$dataであればthis.$data.$dataでないとアクセスできません。

また、テンプレート内では、コンポーネントインスタンスが文脈として設定されます。
そのためthisは省略でき、以下は同じ意味になります。
<div v-if="! this.$data.kv"></div>
<div v-if="! $data.kv"></div>
<div v-if="! kv"></div>

投稿2018/11/11 15:38

NozomuIkuta

総合スコア1260

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hasshy

2018/11/16 05:21 編集

ご回答いただきありがとうございます! お日にちが空いてしまい申し訳ございません。 また、添削までしていただきありがとうございました。 抜けていた箇所がわかり参考になります。 補足の件も承知しました。 省略の規則がわからないところもあり、$dataから書いていましたが省略出来そうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問