Я не знаю, поможет ли это вам, но попробуйте это:
объявить новую переменную:
data() {
return {
height: null,
toggling: false
};
},
при запуске функции открытия или закрытия, проверьте, истинно ли toggling
, если да, просто отмените, как это:
enter(el) {
if (this.toggling) return;
this.toggling = true;
this.height = el.offsetHeight;
el.style.overflow = "hidden";
el.style.height = 0;
el.style.paddingTop = 0;
el.style.paddingBottom = 0;
el.style.marginTop = 0;
el.style.marginBottom = 0;
setTimeout(() => {
el.style.transitionProperty = `height, margin, padding`;
el.style.transitionDuration = this.duration + "ms";
el.style.height = this.height + "px";
el.style.removeProperty("padding-top");
el.style.removeProperty("padding-bottom");
el.style.removeProperty("margin-top");
el.style.removeProperty("margin-bottom");
this.toggling = false;
});
},
Будет что-то вроде этого:
https://codesandbox.io/s/vue-template-78n7t?fontsize=14
Может быть, я сломал ваш код, извините, но вы поймете идею.