程序员程序员产品大学

网页切换特效

2015-09-25  本文已影响330人  haolisand

目前网页没有使用任何特效,直接浏览器访问并不觉得难看,不过 App 首页也是用 WebView 加载网页,载入之前空白,载入后直接显示,就很简陋。被催了好几天之后决定解决这个问题。

从时间序上,整个载入过程分为三个阶段

  1. WebView 访问网页到网页返回
  2. 网页返回到内容返回
  3. 网页内容出现

其中网页能控制的是其中的2和3。找了下主流方案,选用了 animsition。demo 效果很酷炫,不过用到我们网站里遇到了大问题。在目标页面接入 animsition 后,页面一直处于 loading 状态无法正常显示。


debug 后发现该库实现原理是直接先用 css 透明化目标区域内容

.animsition,
.animsition-overlay {
    position: relative;
    opacity: 0;
    -webkit-animation-fill-mode: both;
    animation-fill-mode: both;
}

然后在 js 中显示 loading 效果

if(options.loading) __.addLoading.call(this, options);

注册 load 事件

$window.on('load.' + namespace + ' pageshow.' + namespace, function() {
  if(__.settings.timer) clearTimeout(__.settings.timer);
  __.in.call(_this);
});

等 load 事件触发后移除 loading 效果

if(options.loading) __.removeLoading.call(_this);

显示目标内容

$this
  .removeClass(inClass)
  .css({ 'opacity' : 1 })
  .trigger(__.settings.events.inEnd);

而我们网站目前的 requireJS 架构直接等 load 好了之后才会执行页面 js,所以无法收到事件,出现无尽 loading 的假象。

这和 github 上另一个人的问题如出一辙 ,最奇葩的是作者 close 了这个 issue,但问题仍然完全没被解决 orz


只能自己处理。。

虽然只完成了阶段3的部分,不过效果实在酷炫到简直可以忘掉之前两个白屏的阶段 XD

不过问题毕竟不能无视,初步计划未来做 pull to refresh 时顺便将内容全改为 ajax 方式获取。这样阶段1的时间会被缩短,阶段2的事件也可以接收处理,体验应该会更好。

有考虑过WebView自己在调用时显示 loading,不过考虑版本升级等原因,和网页的效果可能不一致,暂时先不处理。

上一篇 下一篇

猜你喜欢

热点阅读