javascript - Javascript Web 中的共享元素转换
问题描述
考虑这个 UI 动画模型。这里有一个主详细信息页面。当用户点击/点击母版页面上的给定卡片时,它必须将用户带到产品详细信息页面
/products
---> /products/:productId
它适用于所有前端平台,无论是 Android/ios 还是 Web
主产品页面可能有很长的此类卡片列表(甚至在屏幕折叠下方)。现在,执行这种转换并不是很困难,它混合了简单的缩放、平移、不透明度操作。
如果这个应用程序没有涉及路由,那很好。但考虑到,我们需要将产品详细信息页面路由设置为/products/:productId
.
现在的问题是,在您的应用程序中跨页面执行这些连续平滑过渡是不可能的,因为路由更改会导致当前页面及其所有子组件的卸载和新页面组件的安装。并且为了执行上述转换/动画,唯一可能的方法是我们可以将组件或卡片转换到动态路由层次结构之外。
像这样的东西
<Router>
<Card />
<Switch>
<Route path="/products/:productId" component={ProductDetail} />
<Route path="/products" component={Products} />
<Route path="/" component={Home} />
</Switch>
</Router>
因此,在这里,理想过渡的唯一候选者是<Card />
跨页面导航的组件,因为它不会在路由更改时卸载。
但是,必须将项目从母版页上的长列表转换到详细信息页的用例如下所示也是有效的,不能忽略。可悲的是,我找不到任何可以以正确方式实现这一目标的网络参考资料。
您对此有何看法?
解决方案
查看 Framer Motions AnimateSharedLayout。您只需使用 包装您的应用程序AnimateSharedLayout
,然后将 a 添加layoutId
到您的路线/页面之间共享的元素中,并且 framer 运动将负责为中间动画制作动画。
这是一个代码示例,它完全实现了您正在寻找的内容https://codesandbox.io/s/framer-motion-animatesharedlayout-app-store-demo-i1kct
推荐阅读
- javascript - charAt 不适用于在 javascript 中动态创建的元素
- c# - 列出命令需要 allowAdmin 用于 redis
- c# - C# 从队列中选择一个随机项
- plotly - 如何在绘图中显示来自 GeoJSON 的多边形?
- selenium - 我想使用 selenium 自动化 Web 应用程序的音频/视频调用。有可能吗?如果是这样,有人可以分享任何见解或想法吗?
- php - Laravel 通过 hasOne 关系以及第一条记录获取数据库中的先前记录
- mysql - 在 K8S 管理的 mysql 服务器中禁用二进制日志
- c# - Firestore 侦听器不适用于 EC2 实例上的 Windows 窗体应用程序
- powershell - 尝试使用 Publish-PnPApp 在 AppCatalog 上发布/部署 .sppkg 时出错
- java - 获取特定格式的时间戳