Vue Transition组件子元素动画不触发怎么办?
在用Vue的Transition组件包裹列表时,切换列表项时外层动画正常,但子元素的hover效果动画突然失效了,这是为什么?
我尝试给Transition加了mode=”out-in”,然后在CSS里写了.v-leave-active类,但子元素的transition属性好像被覆盖了。检查了代码没发现语法错误,但动画就是不执行…
<transition @before-enter="beforeEnter">
<ul v-if="showList">
<li
v-for="item in items"
:key="item.id"
style="transition: transform 0.3s"
>
{{ item.name }}
</li>
</ul>
</transition>
.v-leave-active或者.v-enter-active这些类作用在外层元素时,影响了内部子元素的样式。效率更高的做法是,不要直接在
style里写transition属性,而是通过CSS类来控制子元素的动画。这样可以避免被Vue的过渡类覆盖掉。把代码调整成这样试试:
然后在CSS中这样定义:
这里的关键点是,子元素的动画逻辑完全交给
.list-item类处理,而外层的过渡效果用fade-前缀的类来控制。这样内外动画互不干扰,性能也更好。如果还是有问题,检查一下是不是其他全局样式污染了你的子元素,可以用浏览器的开发者工具看看最终生效的样式。别忘了,Vue的Transition组件本质上就是动态添加和移除类名,搞清楚每个类的作用范围就能解决大部分问题。