我正在使用HTML5/CSS3为iPad开发应用程序。我没有使用任何框架,而是仅使用设备本地支持的内容。我创建了一些CSS3动画来模拟iOS屏幕之间滑动时的典型左滑或右滑。以下是一个滑向左侧的动画示例,它利用了iPad的CSS3硬件加速功能:(iPad运行4.2版本)。
/*************************************************
Slide Left
*************************************************/
.screen.slideleft{
-webkit-animation-duration: 0.5s;
-webkit-animation-timing-function: ease-in-out;
}
.screen.slideleft.outgoing{
z-index: 50 !important;
-webkit-animation-name: slideleft-outgoing;
}
.screen.slideleft.incoming{
z-index: 100 !important;
-webkit-animation-name: slideleft-incoming;
}
@-webkit-keyframes slideleft-outgoing{
from { -webkit-transform: translate3d(0%,0,0); }
to { -webkit-transform: translate3d(-100%,0,0); }
}
@-webkit-keyframes slideleft-incoming{
from { -webkit-transform: translate3d(100%,0,0); }
to { -webkit-transform: translate3d(0%,0,0); }
}
我还有这段CSS,我试图使用它来修复闪烁问题:
.incoming,
.outgoing{
display: block !important;
-webkit-backface-visibility: hidden;
}
这很有效,但是当iPad键盘被使用后,所有的动画都会严重闪烁。
我一直在寻找一个使用键盘并且之后没有闪烁的iPad HTML5应用程序的例子,但是没有找到太多。 jqTouch演示在iPad上表现出相同的行为(尽管我知道它们是为iPhone设计的)。
我找到了一些类似的帖子/问题,但没有找到好的答案。 我已经阅读了http://css3animator.com/2010/12/fight-the-flicker-making-your-css3-animation-bomb-proof/和那里链接的文章,但没有成功。
还有其他建议吗?
更新1/13 @ 9am
我添加了这个CSS,它帮助了很多:
.incoming *,
.outgoing *{
-webkit-backface-visibility: hidden;
-webkit-transform: translate3d(0,0,0); /* 这可以显著减少闪烁。 */
}
前景元素似乎不再闪烁,但背景仍然会。仍在寻找一些有关Mobile Safari内存处理策略的帮助或有用资源。
更新1/16 @ 11pm
按照匿名建议增加z-index,但似乎没有什么区别。
更新 1/17 @ 8:30am
我在这里发布了一个问题演示。
在屏幕之间的转换很好...直到您在其中一个表单字段内点击。键盘弹出并返回后,所有转换都会闪烁。在iOS模拟器或实际iPad上打开链接以查看我所说的内容。