В настоящее время у меня есть компонент vue, который я использую для выбора напитков, которые необходимо заказать.
Вы можете увеличивать или уменьшать количество напитков для каждого типа.
Есть 2 кнопки (Увеличение и уменьшение), кнопка уменьшения должна быть скрыта, когда количество заказанных напитков для этого типа равно 0. Это можно легко сделать, используя :class="drink.amount > 0 ? 'visible':'invisible'"
, используя классы попутного ветра, которые устанавливают visibility:hidden
свойство css. При использовании этого метода это выглядит так:
![Image showing vertically aligned buttons](https://i.stack.imgur.com/6tG2R.png)
Теперь я попытался реализовать анимацию CSS (сдвинув кнопку под блоком напитка, чтобы скрыть его, а затем спрятаться от dom). Я хочу реализовать это, используя компонент перехода vue, поскольку он интенсивно используется во всем приложении.
Теперь у меня проблема в том, что компонент перехода vue работает только с ограниченным количеством функций vue, среди которых v-if
и v-show
. v-if
удаляет HTML из домена. v-show
устанавливает свойство display:none
, обе эти функции имеют эффект смещения кнопок:
![Image showing button missing decrement button left of center](https://i.stack.imgur.com/8lCom.png)
Я хотел бы знать, как я могу использовать компонент перехода vue и получить запрошенные выровненные кнопки, как я получил без анимации.
<div v-for="drink in drinks" class="w-full flex">
<div class="mx-auto flex">
<transition name="transition-slide-right">
<div class="bg-white w-16 h-16 flex justify-center items-center mt-12"
v-show="drink.amount">
<p>-</p>
</div>
</transition>
<div class="bg-brand w-32 h-24 flex justify-center items-center my-8 z-30">
<p>{{drink.name}} ({{drink.amount}})</p>
</div>
<div class="bg-white w-16 h-16 flex justify-center items-center mt-12">
<p>+</p>
</div>
</div>
</div>
и сопроводительный сценарий.
<script>
export default {
name: "CreateTransaction",
data: function() {
return {
drinks: [
{name: 'Cola', price: '1.0', amount: 1},
{name: 'Sinas', price: '1.0', amount: 0}
],
}
}
}
</script>
Наконец, CSS:
.transition-slide-right-enter-active, .transition-slide-right-leave-active {
transition: transform .5s;
}
.transition-slide-right-enter, .transition-slide-right-leave-to {
transform: translateX(100%);
}
В качестве текущего обходного пути я удалил компонент перехода, добавил класс transition-slide-right-enter-active
и, если count == 0, я условно добавлю класс transition-slide-right-enter
. Это не скрывает элемент, но скрывать его не требуется, поскольку я перемещен под центральный блок.