在状态改变时,做动画

Posted

技术标签:

【中文标题】在状态改变时,做动画【英文标题】:On state change, do animation 【发布时间】:2021-07-30 17:02:59 【问题描述】:

目前我在 Vue.js 中工作,并且有一个我想要动画的导航菜单。我要做的是在用户将鼠标悬停在其中一个导航按钮上时显示两个 li 元素。 目前我正在做的是将showActivities 的数据类型默认设置为false,并将mouseenter 上的truemouseleave 上的false 设置为。因此,这些项目会在悬停时出现和消失,但它们不是动画的。怎么做动画呢?

<ul class="navs">
      <li>Schedule</li>
      <li @mouseenter="showActivities = true" @mouseleave="showActivities = false">Team Activity</li>
      <li v-show="showActivities">tik tak tow</li>
      <li v-show="showActivities">Bejewel</li>
      <li>Resources</li>
      <li class="logout"><a href="https://google.com" target="_blank">Logout</a></li>
    </ul>

<script>
export default 
  name: 'SideMenu',
  data() 
    return 
      showActivities: false,
    ;
  ,
;
</script>

【问题讨论】:

我建议使用嵌套列表来显示/隐藏子菜单,它更容易制作动画并且通常使用它(不要在两个 lis 上使用 v-show,而只在一个 ul 上使用),例如有bootstrap 可以检查。对于您的问题,首先在 showActivities 为 true 时添加类,然后向此类添加动画,仅此而已。而不是使用 v-show,只需使用 css 属性 display/opacity 或 wathever 在动画结束后隐藏子菜单。另一件事是您的动画,未指定。因为对于差异动画,您应该使用差异模式。 【参考方案1】:

好的,如果我没记错的话,您想要一种动画,例如缓慢的淡入淡出。 在 vuejs 转换中,状态附加到可以调用的 CSS 类,并且可以根据需要进行修改。文档对此更清楚 Vuejs Transitions

例如,如果你在你的 css 部分添加这个,过渡将是一个缓慢的淡入淡出:

    .fade-enter-active, .fade-leave-active 
  transition: opacity .5s;

.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ 
  opacity: 0;

【讨论】:

以上是关于在状态改变时,做动画的主要内容,如果未能解决你的问题,请参考以下文章

动画状态改变但不是实际动画

ViewGroup内容改变时的动画效果—LayoutTransition

用动画改变状态栏样式

故事板动画没有动画

我们如何根据状态图更改 3D 动画对象(代理表示)颜色?

css3动画如何在动作结束时保持该状态不变