我有一个v-card
,我想用一次单击来回动画。
如果我点击一个向左的箭头,卡片应该向右滚动,然后立即从左边滚动回来。另一个按钮应该反过来工作。
问题是这里什么都没发生。我做错了什么?
我的模板:
<v-card>
<v-btn icon @click="back = false">
<v-icon>mdi-arrow-left</v-icon>
</v-btn>
<v-btn icon @click="back = true">
<v-icon>mdi-arrow-right</v-icon>
</v-btn>
</v-card>
<transition :name="back ? 'slide-fade' : 'slide-fade-reverse'">
<v-card max-width="200" class="mx-auto mt-5" height="80">
<span class="d-flex justify-center pt-7">{{back}}</span>
</v-card>
</transition>
字符串
我的脚本:
data() {
return {
back: false,
}
},
型
我的css:
/* Prev */
.slide-fade-enter-active {
transition: all .3s ease;
}
.slide-fade-leave-active {
transition: all .3s ease;
}
.slide-fade-enter {
transform: translateX(100px);
opacity: 0;
}
.slide-fade-leave-to {
transform: translateX(-100px);
opacity: 0;
}
/* Next */
.slide-fade-reverse-enter-active {
transition: all .3s ease;
}
.slide-fade-reverse-leave-active {
transition: all .3s ease;
}
.slide-fade-reverse-enter {
transform: translateX(-100px);
opacity: 0;
}
.slide-fade-reverse-leave-to {
transform: translateX(100px);
opacity: 0;
}
型
我为此做了一个笔:https://codepen.io/Tenarius/pen/WNwdEve
3条答案
按热度按时间0md85ypi1#
为了使
leave
和enter
转换工作,<transition>
元素必须具有v-if
条件。当它从false
更改为true
时,该元素将被插入到DOM中,并根据enter
转换进行动画。当条件从true
变为false
时,执行离开转换,当它结束时,从DOM中删除元素。但你没有这样的条件。您只是更新了卡片的内容,并期望将其从DOM中删除并替换为新的内容。
为了实现预期的功能,你应该使用一个卡片列表(它只包含当前活动的卡片),再加上使用
<transition-group>
,在内部,它使用与transition
相同的机制,但v-if
的条件是元素是否是集合的一部分。在您的例子中,“集合”是一个经过过滤的卡片列表,其中只包含一张卡片。使用这种技术,离开元素获得离开动画,而进入元素获得进入动画,因为根据模型中的更改,元素实际上被删除并添加到DOM中。
看到它工作here。
pcww981p2#
由于转换需要离开和进入,因此元素必须“消失”和“重新出现”,因此可以使用
setTimout
来构建解决方案。字符串
然后可以使用
v-show="!loading"
扩展卡,并且左按钮和右按钮必须调用loadTimeout()
函数。工作示例here
zvokhttg3#
我实现了这个,它正在工作:
个字符
希望能帮上忙!