VueJS | Анимация исчезновения компонента в хуке beforeDestroy
Сниппет:
Vue.component('fade-component', {
template: `<div class="fade-component" ref="container"></div>`,
mounted() {
gsap.fromTo(this.$refs.container, {
autoAlpha: 0
}, {
autoAlpha: 1,
duration: 0.5
});
},
beforeDestroy() {
// Не работает
gsap.to(this.$refs.container, {
autoAlpha: 0
});
}
});
new Vue({
el: "#app",
data: {
show: true
},
methods: {
toggleShow() {
this.show = !this.show;
}
}
})
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
button {
margin-bottom: 20px;
border-radius: 4px;
background-color: #e74c3c;
border: 0;
color: #fff;
font-size: 20px;
padding: 10px 20px;
outline: none;
box-shadow: 0 0 0 0 rgba(52, 152, 219, 0.5);
transition: box-shadow .1s;
cursor: pointer;
}
button:active, button:focus {
box-shadow: 0 0 0 5px rgba(52, 152, 219, 0.5);
}
.fade-component {
width: 300px;
height: 300px;
background-color: #34495e;
border-radius: 4px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.3.1/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<button @click="toggleShow">Toggle</button>
<fade-component v-if="show" />
</div>
Имеется проект, в котором подключается компонент fadeComponent, компонент появляется/исчезает на этапе его подключения , анимация появления компонента находится непосредственно в хуке mounted(), но есть ли такой хук для beforeDestroy() ? Точнее, как задать хуку beforeDestroy() таймаут перед его удалением?
Пробовал вариант с transition и хуками enter/leave, но там необходимо делать v-if внутри transition, но в моей задаче необходимо отключать компонент полностью. Какие есть и есть ли вообще варианты исчезновения блока в данном условии ?
Ответы (1 шт):
Для анимации Вам следует использовать не хуки компонента, а хуки анимации.
Так же рекомендация использовать CSS анимации, если это возможно (в Вашем случае например это предпочтительнее). СSS анимации производительнее, так как имеют аппаратное ускорение.