React 中怎么快速实现 /t/897332 这种过渡动画?

2022-12-17 14:50:32 +08:00
 edis0n0
前两天刷 V 站的时候看到的,传送门 /t/897332

非互联网公司,技术栈都是 10 年前的,感觉这过渡动画不错想在个人产品里加个玩玩。
4199 次点击
所在节点    React
26 条回复
l4ever
2022-12-17 14:53:01 +08:00
动画是 css 的, 和框架没多大关系.
edis0n0
2022-12-17 14:54:50 +08:00
@l4ever #1 主要想快速实现这种跨页标题直接放大的无缝过渡动画,应该需要 SPA 框架的路由协助
edis0n0
2022-12-17 15:01:48 +08:00
公司技术栈最新的产品用的是 asp net core 1.1 mvc + jquery ,react 和 ng 都是没事干学着玩的,如果理解的不对欢迎指出
jazzg62
2022-12-17 15:04:27 +08:00
看看 css 的 animation
edis0n0
2022-12-17 15:05:48 +08:00
@jazzg62 #4 他这个动画跨页面了,不需要路由框架协助吗
okakuyang
2022-12-17 15:06:15 +08:00
react-transition-group
IvanLi127
2022-12-17 15:15:18 +08:00
@edis0n0 为啥一定要路由框架,如果就三五个页面,其实直接用元素的隐藏和显示就好了。。
fwh
2022-12-17 15:17:24 +08:00
jazzg62
2022-12-17 15:19:47 +08:00
@edis0n0 需要啊,但是也需要先了解下 css 的 animation 哦
IceBay
2022-12-17 15:22:13 +08:00
https://motion.ant.design/exhibition-cn/
okakuyang
2022-12-17 15:24:06 +08:00
@fwh framer 居然做这么好了!,去年看还是只有编辑器,现在居然连模版库之类的都全了!
ragnaroks
2022-12-17 15:30:22 +08:00
这里只说思路,我没仔细看原文的实现。

在页面(路由)的销毁过程过渡 width 、height 至 0 ,在页面(路由)的挂载过渡 width 、height 至目标值。页面的默认大小设置为 0 即可。原理并不复杂,麻烦的是如何配合组件的形态(按钮、卡片)和用途(输入文本、点击响应)实现配套的过渡动画。
ragnaroks
2022-12-17 15:38:10 +08:00
我再补充一个,react 、vue 这类库中的“页面”其实并不是真正的某个 html 页面,而是一个 div 元素,因此完全可以利用基于样式表的动画。简单来说 /page/a 和 /page/b 就是 <div id="page-a"> 和 <div id="page-b">。
rabbbit
2022-12-17 15:48:38 +08:00
https://developer.chrome.com/docs/web-platform/view-transitions/

<amp-youtube data-videoid="JCJUPJ_zDQ4" layout="responsive" width="480" height="270"></amp-youtube>
jfv
2022-12-17 15:51:25 +08:00
react-spring
我的项目就用到了 不过只用了淡入淡出 可以参考一下
https://github.com/mebtte/cicada
edis0n0
2022-12-17 15:56:11 +08:00
@rabbbit #14 看文档貌似要 Chrome 109+才能用,那意义不大,后台统计一堆用户尤其是国产浏览器那些版本号还在 chrome70~80 间
yinchunde
2022-12-17 18:29:05 +08:00
Flutter 非常好实现,Hero 动画,只要设为同一个 tag 的两个页面的元素,即可做到同样的效果。
edis0n0
2022-12-17 18:31:48 +08:00
@yinchunde #17 Flutter 太重了,开个页面先加载几 MB 的用户体验什么动画都救不回来
edis0n0
2022-12-17 18:32:26 +08:00
@edis0n0 先加载几 MB wasm 文件

记得打了 wasm 的,输入法 bug 卡没了
lyc575757
2022-12-17 18:38:33 +08:00
vue 倒是有一个类似的库 专门做跨路由的动画 可以看看 readme 参考一下它是如何实现的

https://github.com/antfu/vue-starport

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

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

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

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

© 2021 V2EX