Vue

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

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Vue 記事の目次はこちら

Vue では配列にデータを追加すれば勝手に表示も増えてくれます。その配列が増えた時に Transition をかける方法について、まとめました。

Transition とは とは?

Vue でアニメーションをつける時に便利なコンポーネントです。

簡単な実装についてはこちらで書いています。

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

さっそく実装してみます

全てのコードを載せます。

ボタンを押せば配列に要素が追加されます。

<template>
  <div class="container">
    <button @click="addArray">増えるよ</button>
    <!-- v-forで配列が増える部分をtransition-groupタグで囲う -->
    <!-- listという名前のアニメーションを指定しています -->
    <transition-group name="list" tag="div">
      <div v-for="a in array" :key="a.id">
        <p>{{ a.id }}: {{ a.text }}</p>
      </div>
    </transition-group>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        //初期値を入れているだけ
        array: [
          {
            id: 1,
            text: "テキスト1",
          },
          {
            id: 2,
            text: "テキスト2",
          },
          {
            id: 3,
            text: "テキスト3",
          },
        ],
      };
    },
    methods: {
      addArray: function() {
        //今回はサンプルなので適当にオブジェクトを入れる関数を書いています
        this.array.push({
          id: 4,
          text: "テキスト4",
        });
      },
    },
  };
</script>

<style scoped>
  .container {
    margin: 100px;
    width: 100%;
  }
  /* listという名前のアニメーションを用意しています。公式のやつのコピペです */
  .list-enter-active,
  .list-leave-active {
    transition: all 1s;
  }
  .list-enter, .list-leave-to /* .list-leave-active for below version 2.1.8 */ {
    opacity: 0;
    transform: translateY(30px);
  }
</style>

実装の解説

コメントアウトのとおりですが、v-for で配列が増える部分を transition-group タグで囲います。

<transition-group name="list" tag="div">
  <div v-for="a in array" :key="a.id">
    <p>{{ a.id }}: {{ a.text }}</p>
  </div>
</transition-group>

transition-group には name を指定します

今回でいえば、name=“list”なので list という名前がついています。

transition-group には tag を指定します

今回でいえば、tag=“div”なので div タグが追加されています。

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

/* listという名前のアニメーションを用意しています。公式のやつのコピペです */
.list-enter-active,
.list-leave-active {
  transition: all 1s;
}
.list-enter, .list-leave-to /* .list-leave-active for below version 2.1.8 */ {
  opacity: 0;
  transform: translateY(30px);
}

したからふわっと浮かび上がってくるように文字列が追加されたら OK です。

まとめ

以上、Vue で配列に追加されたときに Transition するを をめっちゃ簡単に説明してみました。

誤字や分かりにくいところありましたら Twitter の DM などからご連絡いただければと思います。

それでは!