1. 动画过渡

Ralltiir 的一大功能就是页面切换效果,减少用户等待的焦虑感。 虽然面临着不完善的异步 API,以及各种 transition 相关的兼容性问题, 我们仍然要在尽量多的浏览器上提供体验不错的页面过渡态。 本文介绍过渡态的实现,兼容性问题,以及对应的降级方式。

1.1. 实现方案

页面切换动画分为入场、退场和没有动画三种:

  • 当用户点击一个链接时发生页面入场。
  • 当用户点击我们提供的返回按钮时页面退场。
  • 当用户使用浏览器前进后退(包括手势),现在 Ralltiir 还不能得知是前进还是后退,不做动画效果。

入场为从右向左划入,退场为入场的逆向操作。下文都以入场动画为例。 入场动画使用 CSS Transition 实现,步骤如下(以下步骤与网络请求是并发的):

  1. 渲染新浮层。使用 注册时提供的配置 渲染一个 viewposition:fixed)。
  2. 保持滚动位置。滚动新的浮层,使得 fixed 前后视觉位置一致。
  3. 入场动画。让浮层从右向左做 transition
  4. 渲染页面。等待网络请求结束后,渲染结果 HTML 至浮层上。
  5. 隐藏旧页面。隐藏上一个页面的 view
  6. 恢复滚动位置。恢复当前 viewposition 相关属性。

退场动画有一个额外的工作:离开时保存浏览位置(scrollTop, scrollLeft),返回到时恢复浏览位置。

1.2. 兼容性与降级

在有些浏览器下动画的实现可能有兼容问题,这时会根据 UA 进行相应降级。

1.2.1. 保持滚动位置

下面的浏览器中保持滚动位置会导致页面跳动:

  • iOS 下,UIWebview 的浏览器中

解决方案:Ralltiir 不保持滚动位置,视觉上表现为页面滚到顶后进行退场动画。

1.2.2. 后退按钮失效

在 iOS 11,Safari 内核的浏览器中,页面 load 事件会阻塞 popstate 的触发。 导致页面未完全载入时,后退按钮无效。

解决方案:Ralltiir 暂无方案,建议相关页面优化首屏时间。

results matching ""

    No results matching ""