переходы vue без необходимости использования v-if / v-show

#vue.js #dom #css-transitions #vuex #vue-transitions

#vue.js #dom #css-переходы #vuex #vue-переходы

Вопрос:

Краткий вопрос, поскольку я новичок в переходах Vue. Мой вопрос в том, возможно ли применить переход к элементу / компоненту без его повторного рендеринга. Следовательно, не с использованием v-if или v-show. Мой вариант использования — это расширение и сжатие компонента div нажатием двух разных кнопок в строке заголовка, поэтому я не хочу, чтобы элемент повторно отображался при переходе. Спасибо за ответы!

из приведенного ниже кода я хочу применить переход expand при нажатии кнопки «развернуть» и отменить переход с помощью кнопки «свернуть»

 <template>   
<transition  name="expand">     
<div>         
<div class="title-bar-controls" @mousedown.stop>           
<Button aria-label="Minimize" @click="windowToggle('minimize')"></Button>           
<Button aria-label="Maximize" @click="windowToggle('maximize')"></Button>           
<Button aria-label="Close" @click="hideContainer"></Button>         
</div>     
</div>   
</transition>
  

Ответ №1:

Напрямую привязывает класс анимации CSS к вашему окну.

Как показано ниже (привязки minimize или maximize ).

 new Vue ({
  el:'#app',
  data () {
    return {
      classes: ''
    }
  },
  methods: {
    windowToggle(name) {
      this.classes = name
    }
  }
})  
 @keyframes animate-minimize {
  from {width: 400px; height: 400px;}
  to {width: 0px; height: 0px;}
}

@keyframes animate-maximize {
  from {width: 0px; height: 0px;}
  to {width: 400px; height: 400px;}
}

.minimize {
  width: 0px;
  height: 0px;
  animation-name: animate-minimize;
  animation-duration: 2s;
  border:solid 1px;
}

.maximize {
  width: 400px;
  height: 400px;
  animation-name: animate-maximize;
  animation-duration: 2s;
  border:solid 1px;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
   
<div>         
  <div class="title-bar-controls" @mousedown.stop>           
    <Button aria-label="Minimize" @click="windowToggle('minimize')">-</Button>           
    <Button aria-label="Maximize" @click="windowToggle('maximize')">[]</Button>           
    <div :class="classes">

    </div>
  </div>     
</div>   

</div>  

Комментарии:

1. Это круто, но при этом не используется <transition> компонент Vue. Это просто разновидность перехода DOM. В этом нет ничего Vue.