Этот вопрос закрыт для ответов, так как повторяет вопрос Как сделать на vueJs 3 похожий эффект как jQuery slideToggle?
brutto333
@brutto333

Как исправить slideToggle?

Добрый день, подскажите пожалуйста в чем ошибка не могу разобраться. Не работает корректно effect SlideToggle как на jQuery. В начале появляется текст, потом плавно выезжает блок, а когда закрывается блок просто скачет, а не плавно заезжает назад. В чем может быть ошибка ?
<template>
  <div class="max-w-267 mx-auto mt-20">
    <div class="cursor-pointer p-7.5 mb-2 last:mb-0" 
      @click="toggleOpen(i)"
      v-for="(faq, i) in faqs"
      :key="i"
      :class="{'bg-black-600': faq.open, 'rounded-3xl': faq.open}"
      >
        <div class="flex items-center justify-between mb-3">
          <div class="text-white-100 text-base font-medium">{{ faq.question }}</div>
          <div class="">
            <PlusIcon v-if="!faq.open"/>
            <MinusIcon v-else/>
          </div>
        </div>
        <Transition
          name="slide"
          @enter="onEnter"
          @after-enter="onAfterEnter"
          @before-leave="onBeforeLeave"
          @after-leave="onAfterLeave"
        >
          <div class="text-white-100 text-xs font-normal transition-height duration-500 ease-in-out" 
          v-show="faq.open"
            >
        {{ faq.answer }}
        </div>
      </Transition>
      </div>
    </div>
</template>
<code lang="javascript">
methods: {
  toggleOpen(index){
    this.faqs.forEach((faq, i) => {
      faq.open = i === index ? !faq.open : false;
    })
  },

  onAfterEnter(el){
    el.style.height = el.scrollHeight + 'px'
  },

  onAfterEnter(el){
    el.style.height = el.scrollHeight + 'px'
  },

  onBeforeLeave(el){
    el.style.height = el.scrollHeight + 'px'
  },

  onAfterLeave(el){
    el.style.height = '0px'
  }
}
</code>
  • Вопрос задан
  • 62 просмотра
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы