我正在开发一个用于移动/触摸设备部署的 HTML5 应用程序,并且正在使用 PhoneGap,目前仅针对 iOS 平台(Webkit)。
我的问题发生在 CSS3 转换(它也发生在常规的 jQuery 动画上),因为 Webkit 往往会做一些奇怪的事情。例如,在可在此处查看的代码( http://jsfiddle.net/lvl99/dSjcj/ ) 中,当您单步浏览页面时,按顺序返回(即从第 5 页到第 1 页)将呈现动画效果,但是向前走(即从第 1 页到第 5 页)会产生不一致的渲染,主要是在丑陋的一面(记得在 Safari 中查看它。我一直在使用 Safari 5.1.7)。
我最初使用 jQuery Mobile 框架进行开发,但我使用的关键功能是通过主题标签和转换的页面路由,但由于我遇到了转换的这些问题,我尝试开发一个更简单的解决方案来避免任何 JS/CSS与 jQM 冲突。唉,我提出的错误可能实际上与 Safari/Webkit 相关。
我最初使用jQuery.animate()
left属性,到现在使用transform
类似于jQM处理方式的CSS3技术,也是为了帮助提高速度并测试它是否更愿意正确渲染。两者都没有工作到不同程度的不工作。
幸运的是,Firefox 渲染一切正常。它没有问题,但是 Firefox 不是目标平台,当项目在 PhoneGap 环境中的 Xcode 中编译时,它表达了与 Safari 相同的问题。当我还在使用早期开发版本的 jQM 时,Safari 会很好地渲染它(包括 iPad 模拟器上的 Safari),但 UIWebView 不会。这让我觉得这可能是 Nitro JS 引擎问题(例如,也许 UIWebView 没有正确渲染过渡的速度/能力/能力——我试图将所有动画转移到 CSS3 以降低渲染对 GPU 的操作)。
我使用过各种插件,如jQuery Transit、jQuery Animate Enhanced和TransformJS。我还尝试在 jQM 中编写我自己的自定义转换处理程序,但它没有正确呈现(尽管它最接近:在 Firefox 和 Safari 中工作,只是在 UIWebView 中不工作)。
关于转换具有不同类型内容的元素,我也得到了不一致的结果:视频、图像、浮动元素、多个段落都是我测试过的。在某个阶段,与序列的末端(即 1 和 5)之间的转换也存在问题,但现在我的问题只是升序页面转换(即 1 到 5)。
我已经为此花费了几天时间,试图解决这个看似很小的问题,但它对于用户体验来说是不可或缺的,这种幻灯片转换是基于用户在应用程序中移动的方向的上下文。最简单的解决方案是仅删除转换,但如果有某种方法可以了解 Webkit/UIWebView 到底遇到了什么问题,请为其创建一些解决方案。毫无疑问,这也与 jQM 在转换中遇到的闪烁问题有关。网络上为这些人建议的许多 CSS 修复也不起作用,例如-webkit-backface-visibility: hidden
设置默认转换属性-webkit-transform: rotateX(0)
。