我刚 希望有更好的原生页面过渡,Bramus 评论 说 Chrome 正在开发一些东西。看起来他们对此很感兴趣,因为有一个 全新的仓库,而且您可以在 Chrome Canary 中直接测试它。
该仓库已移至 这里,我非常喜欢这个名称。“共享元素”在这里非常关键。它不仅是像滑出、滑入或 星形擦除 这样的动画,而是能够将单个元素移动到新位置。Shawn 指出,Sarah 的文章使这项功能非常清晰
我会将当前自述文件的代码片段放在这里,因为它真的很酷
function handleTransition() {
document.documentTransition.prepare({
rootTransition: "reveal-left",
duration: 300,
sharedElements: [e1, e2, e3]
}).then(() => {
doCustomThings();
document.documentTransition.start({ sharedElements: [newE1, newE2, newE3] }).then(
() => console.log("transition finished"));
});
}
您不必拥有 sharedElements,但您可以使用它们,目前它们都需要使用 CSS 对其应用 contain: paint
才能工作。请注意,您不必处理更新 URL 或其他任何操作,因为这些操作会自动发生(我想?),因为这不需要单页面应用程序架构才能工作。
奇怪的历史
当我正在聊天的时候,Alex Riviere 指出,Chromium 之前的 Edge 拥有(专有的)页面过渡
<meta http-equiv="Page-Enter"
content="RevealTrans(Duration=0.600, Transition=6)">
Whaaaat。Christian Schaefer 有 一篇哀叹我们失去 Trident 时失去的东西的文章
顾名思义,这样的过滤器会在导航时让用户从页面平滑过渡到页面,而不是像我们现在习惯的那样突然出现页面。您可以通过引用编号来选择大量的过渡过滤器
向上擦除、向下擦除、随机溶解、水平拆分,等等。但没有星形擦除,太不可思议了。当然也没有“共享元素过渡”
非常酷。我喜欢 Reveal JS 如何以声明方式处理共享元素过渡 https://revealjs.npmjs.net.cn/auto-animate/,但也许这个 API 的命令式方式可以提供更多控制?
我非常喜欢这个想法,它可能内置到浏览器中 - 如果它得到很好的支持,我会立即使用它!我还很喜欢这个 Vue 插件 https://github.com/justintaddei/v-shared-element,它在泛化 FLIP 动画和基于路由执行动画方面做得很好,尽管有时它会作弊,如果它找不到使它们变形的方法,它会简单地淡出或淡入一个元素。尽管如此,它是我遇到的最实用的通用 FLIP 库。
对我来说,GSAP 的 FLIP 似乎更通用。共享元素相对于 FLIP 的优势是什么?
https://greensock.com/docs/v3/Plugins/Flip/
FLIP 主要用于移动元素,但与网站上从一个 URL 实际移动到另一个 URL 无关。看起来这个 API 允许您使用类似 FLIP 的技术来进行移动,如果您需要的话。
啊,没错。感谢您指出这一点。
我认为,到目前为止还没有通用的方式来设置页面之间的过渡样式,主要是因为两个原因
一个是您无法控制外部网站(显然,您可以尝试美化从您的页面的退出,但外部页面的加载仍然会很突然,这会破坏整个导航体验 - 使其比没有过渡样式更糟糕)。
第二个可能与整个网络的安全性有关。想象一下,如果您无法清楚地看到您离开一个页面并进入一个伪造的页面的事实,会发生什么。在原生 Android 应用程序中,这并不是问题,因为您始终在自己的设备中,而且对于任何人来说,破坏已安装的应用程序并将其重定向到一个被黑客入侵的网站的程度可能要困难得多。
尽管这种前端特技非常棒,但它们被大公司故意排除在网络推荐之外,因为互联网必须安全,而不仅仅是美丽,即使我们的用户希望看到它尽快实现(我们也是如此)。
值得一提的是,Trident 中的页面过渡是在 1997 年的 IE4 中引入的:https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms532847(v=vs.85)。
将近 25 年前。:)