如何通过 js 的方式控制 css 播放动画?

2022-07-31 03:09:37 +08:00
 LeeReamond

想要实现的效果:侧边栏收纳起来的时候显示小图标,展开的时候显示大图标,两者大小不同,通过动画平滑过度。

纯 css 的方式实现比较简单,比如类似以下实现,可以做到鼠标放上去的时候平滑动画过度

.cls {
  height: 40px;
  transition: .5s linear;
}
.cls: hover {
  height: 80px
}

目前的问题在于组件比较复杂,侧边栏的展开与否不是通过悬停实现的,而是通过 js 控制唤醒的。我使用的是 vue3 框架,在这种情况下如果要实现侧边栏展开前后 cls 高度变化,一般是写作两个类,比如

<div :class="{'cls': !expanded, 'cls-hover': expanded}" />

这样就可以把组件的高度绑定到 js 变量 expanded 上。但是发现一个问题是这么搞的话因为它属于两个类,所以没法利用 transition 的动画变化了,过渡非常生硬。有啥解决方案吗?

365 次点击
所在节点    程序员
1 条回复
wdssmq
2022-07-31 11:45:49 +08:00
可以追加一个类,而不是切换,.cls.hover {}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/869718

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX