Vue.아코디언으로

6083 단어 Vue.js
n번 프라이지만 반복적인 실험 결과가 남는다.
나는 각양각색의 방법이 있다고 생각하지만, 이것은 나 개인에게 가장 적합한 방법이다.

결론

<template>
  <div class="a-accordion">
    <button @click="opened = !opened">
      Click
    </button>
    <transition
      @before-enter="beforeEnter"
      @enter="enter"
      @before-leave="beforeLeave"
      @leave="leave"
    >
      <div v-if="opened" class="a-accordion-inner">
        Accordion
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      opened: false
    }
  },

  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'
    }
  }
}
</script>

<style scoped lang="scss">
.a-accordion {
  .a-accordion-inner {
    overflow: hidden; // 閉じるときに他要素に被らないように必須。
    transition: height 0.2s ease-in-out; // 高さの変更に対して連続的に変化させる。
  }
}
</style>
요점은
  • overflow,transition을 개폐 요소로 지정한다.
  • transion의 연결로 변경height.
  • 두 개!

    참고 자료


    https://jp.vuejs.org/v2/guide/transitions.html
    https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions
    http://lab.astamuse.co.jp/entry/2018/10/15/154737
    https://qiita.com/mimoe/items/7ad8d9ea9fc4299da6bc

    좋은 웹페이지 즐겨찾기