ホーム > Vue > VueのTransitionを使う方法を簡潔に書いてみる
Vue

VueのTransitionを使う方法を簡潔に書いてみる

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

Vue の Transition(ふわっと表示させるような)が使えるようになる記事を目指して書いています。

簡潔に、一番簡単だと思う方法で書いています。

Vue の Transition を使う方法

以下の例は、ボタンを押すと下の文字がふわっと消えたりふわっと出現したりします。

<template>
  <div class="container">
    <button @click="toggleModal">変わるよ</button>
    <!-- fadeという名前のアニメーションを指定しています -->
    <transition name="fade">
      <!-- v-ifやv-showで表示非表示が切り替わる部分をtransitionタグで囲います -->
      <div v-if="modal">True</div>
    </transition>
  </div>
</template>

<script setup>
  import { ref } from "vue"
  const modal = ref(true)

  const toggleModal = () => {
    modal.value = !modal.value
  }
</script>

<style scoped>
  .container {
    margin: 100px;
    width: 100%;
  }

  /* fadeという名前のアニメーション */
  /* enter-activeなどは、いつアニメーションをするかを指定している */
  .fade-enter-active,
  .fade-leave-active {
    transition: opacity 0.4s;
  }
  .fade-enter,
  .fade-leave-to {
    opacity: 0;
  }
</style>

実装の解説

v-if や v-show で表示が切り替わる部分のタグを transition タグで囲う

<transition name="fade">
  <div v-if="modal">True</div>
</transition>

transition タグの直下にv-ifv-showがあるタグがきます。

以下のように、直下にv-if等があれば良く、その<div>の中にさらにタグがあっても大丈夫です。

<transition name="fade">
  <div v-if="modal">
    <div>直下に`v-if`があれば</div>
    <div>複数タグがあっても大丈夫</div>
  </div>
</transition>

transition には name を指定

<transition name="fade">
  <div v-if="modal">True</div>
</transition>

今回は、name="fade"と書かれており、 fade という名前がついています。

style にアニメーションする内容を書く

.fade-enter-active,
.fade-leave-active {
  transition: opacity 0.4s;
}
.fade-enter,
.fade-leave-to {
  opacity: 0;
}

fadeという name を付けたので、

.fade-enter-active,.fade-leave-active,.fade-enter,.fade-leave-to

というクラス名になっています。

fade-以降は、アニメーションのタイミングを指定する、決まった名前になり、Vue 側の API で指定されています。

Vue ビルトインのコンポーネント#Transition

今回は 0.4 秒でフェードアウトされるように書いています。

アレンジする

アニメーションをアレンジしていきます。

アニメーションのアレンジの仕方は、Vue の公式サイトや CSS のアニメーションで検索すると色々見つかると思います。

.fade-leave-active {
  transform: translateX(100px);
  transition: all 0.4s ease;
}

CSS だけ変えてみました。

上のコードに修正すると、ボタンを押すと 0.4 秒かけて右に 100px スライドして表示が消えます。

このように、CSS だけ修正していけばアニメーションを微調整させることができます。

ぜひ使ってみてください!

Transition がうまく動作しない時

v-for を使っていないか

v-forを使っている場合、Transition では動きません。

TransitionGroup というコンポーネントを使います。

詳しくは以下の記事に書いてあります。

⇨Vue で配列に追加する時に、表示を Transition する方法

Transition の name と連携した CSS クラス名になっているか

今回の例では、name="fade"にしました。

クラス名は、fade-enterなど、nameで指定したfade-を prefix で書きましょう。

また、prefix 後のenterの部分は最初から Vue 側で準備されている props ですので、指定されたものを使う必要があります。

Vue ビルトインのコンポーネント#Transition

以上、Vue の Transition を使う方法についての記事でした。

誰かの参考になれば幸いでございます。

フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。