2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vueでtransitionがうまくいかないとき

Last updated at Posted at 2021-02-19

動的にサイズを取得してtransitionしてアコーディオンを作っているのにうまくいかない人へ書きます。

いきなり結言

以下のようにコードを書いていてカクカクするときは、transitionの直下にpaddingやmarginを指定しているか確認しましょう。heightについてtransitionしている場合は、paddingやmarginを0でない値に指定しているとうまくいきません。
というのも、ele.style.height等はpadding等の大きさを含んでないから。じゃないかなと思っていますけど、ちゃんと考えるのめんどくさいので放置しています。
padding等をつけたいときは、transitionに直下に要素を作ってアコーディオンを囲んでしまいましょう。

<transition name="accordion" @before-enter="beforeEnter" @enter="enter" @before-leave="beforeLeave" @leave="leave">
アコーディオンのなかみ
</transition>
methods: {
    beforeEnter(el) {
      el.style.height = '0'
    },
    enter(el) {
      el.style.height = el.scrollHeight + 'px'
    },
    beforeLeave(el) {
      el.style.height = el.scrollHeight + 'px'
    },
    leave(el) {
      el.style.height = '0'
    }
}
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?