如果我们愿意,能够在网页上对页面之间的过渡进行动画处理,而无需诉诸黑客手段或全面的架构选择来实现,那将是一件好事。我可以想象出一个 API,它可以在页面卸载之前运行某些东西,也许可以与 WAAPI 集成,并在下一个页面加载后运行其他某些东西。这将与常规的锚链接和页面加载相结合。
我们确实有一个 onbeforeunload
API,但我不知道它有什么样的包袱。从技术上讲,我们现在可以构建页面过渡,即使没有单页面应用程序架构,但我要的是专门构建的 API,它们可以帮助我们干净地执行此操作(可理解的函数),同时考虑到性能(与正常点击链接一样快)和可访问性(如焦点处理)。

如果您正在构建单页面应用程序,则可以自由地在视图之间进行动画处理,因为页面永远不会重新加载。这里的危险是,您可能会仅仅为了这个功能而选择单页面应用程序,这就是我所说的为了实现这一点而不得不采用网站架构。这感觉就像一个不幸的权衡,因为单页面应用程序带来了大量开销,例如工具和可访问性问题,而这些问题您原本不需要。
如果没有单页面应用程序,您可以使用诸如 Turbo 和 animate.css 之类的工具,就像 这样。或者,Adam 的新 transition.style,一个基于 clip-path()
的向 Daniel Edan 的杰作致敬。也许如果这种方法与 instant.page 配合使用,它将与任何其他内部链接点击一样快。

还有其他参与者试图解决这个问题,例如 smoothState.js 和 Swup。诀窍是:拦截移动到下一页的操作,先运行动画,然后加载下一页,并对新页面进行动画处理。从技术上讲,这会稍微降低速度,但您可以非常有效地完成它,并且移动会带来足够的干扰,以至于感知到的性能甚至可能更好。
理想情况下,我们不需要对 整个页面 进行动画处理,但我们可以完全控制以创建 更有趣的过渡。哎呀,十年前我就在为一位音乐家制作一个页面,当时 在网站上点击只是移动了一些东西,这样音频就会继续播放(而且很有趣)。
这将是 Web 平台介入的好地方。我记得 Jake 在几年前推动过这件事,但我不确定它是否取得了进展。然后我们得到了 portals,它们还不错?就像您在页面上加载一个 iframe,然后对其进行动画处理使其占据整个页面(并更新 URL)。那里没有太多的动画细微差别,但您当然可以滑动一些页面或淡入淡出(嘿,这里还有另一个: Highway),就像 jQuery Mobile 在古代所做的那样。
Chromium 正在为此做一些事情:共享元素过渡。
https://github.com/vmpstr/shared-element-transitions/blob/main/README.md
在 Canary 中可用,可以试用,尽管目前只部分实现。
我最近一直在玩页面过渡。我有一个非常好的设置,它使用并扩展了 readyState 以进行页面进入。onBeforeUnload 对页面退出来说有点过于有限,所以我最终使用了链接上的事件。
我不会在这里发布链接,但如果有人感兴趣,你可以随时给我发私信。
我有兴趣,找不到如何发私信给你。你可以在 github 上找到我,用户名是 tomyo。谢谢!
最好不要用阻塞动画浪费用户时间。
感觉很教条。
有时动画可以帮助用户更清楚地了解正在发生的事情。
动画实际上可以通过解释上下文来提高可访问性。
每当用户说“等等,刚发生了什么?”时,他们是在表达对 UI 从一种状态过渡到另一种状态的困惑。这就是为什么操作系统 UI 默认情况下会对几乎所有内容进行动画处理,尤其是 Android 和 iOS。
话虽如此,最好将动画限制在最多 300 毫秒,并承认用户是否已切换“prefers-reduced-motion”。
用户第一次与您的界面交互时,您可能是在解释上下文,但在接下来的 1000 次使用中,您却在拖慢他们的速度。我怀疑这就是流行应用程序(如 Facebook/Instagram)过渡/动画很少的原因。
这是我喜欢 Svelte-Sapper 的地方,现在 Sveltekit 是组件过渡!太棒了
是的。正要这么说。这是 Svelte-Sapier 的一个很好的内置功能。
完全正确。而且使用 Kit,您可以在前端路由事物,使其看起来和感觉起来像一个完整的网站,只是速度更快。更不用说您可以为首次加载进行 SSR 了。两全其美。
我一直在构建这个,一个使用 JSON 指导的动态函数分支作为其架构的平台。它是一个单页社交媒体帖子网站,可以生成可共享内容的 URL 版本。它还会为各个部分添加动画,包括许多定制的动画效果,从顺序阶梯旋转到缩放淡入,以及我在过去 6 年中找到的最酷的动画。它还将有一个 CMS,使创建新的按钮和内容变得轻而易举。该平台将在网上托管,只需点击几下并使用您购买的域名,它将自动安装可自定义版本的社交媒体帖子网站,并自动创建一个 Android 应用程序来配合您的新网站。它还具有自动调整大小的 CSS,并且适用于所有具有浏览器或 Android 的设备,除了 iPhone。有可自定义的主题可用,它允许用户在其自己的 iframe 浏览器中搜索网络,该浏览器会自动检测内容类型并加以利用。我的名字是 Jonathon,我的电子邮件是 [email protected],如果您想了解更多信息。
我想,实施这种标准的挑战在于,它实际上只会在页面卸载时发生。您将无法有效地加载资源并将页面过渡应用到页面,因为您需要预先加载过渡。
我也是。Portals 看起来比你描述的强大得多,但我还没有用它们进行过黑客攻击,只是看了一些演示。不过很奇怪……你看到过那个鼠标跟随 portal 的演示吗?你可以点击任何地方并生成 portal?我不记得在哪里看到了。
如果您要创建页面之间的动画过渡,那么应用程序应该以与普通网页相同的方式工作(动画除外)。特别是,在正常的 Web 应用程序中,浏览器会记住您浏览历史记录时的页面滚动位置,但在 SPA 中这样做很棘手,您必须诉诸各种黑客手段来存储滚动位置。我认为在某些最佳情况下拥有良好的动画效果,但在其他情况下页面却无法按预期工作,这没有什么好。
情况正在好转
https://github.com/WICG/shared-element-transitions/
(目前只针对单页面应用程序,但希望它也能应用于页面。)