我正在使用 PhoneGap 构建一个 iOS 应用程序。我正在使用 translate3d CSS 动画来创建“翻转”效果。
这对更简单的元素很有用……一个带有前/后 div 的 DIV,可能还有一个或两个额外的跨度。
但是当我试图翻转一个更大的元素时……即整个屏幕,我会遇到重绘故障。当我交换 css 类开始转换时会发生什么,“底部”div 的部分弹出“顶部”div,然后翻转发生,然后它们再次弹出。并且它不是通过显示的整个元素......它是沿着我正在执行平移 3d 旋转的轴拆分的元素的一半。
关于可能导致这种情况的任何想法或理论?它在 iPad 上作为应用程序和 Safari 桌面上发生的情况相同,因此似乎是 webkit 问题。
会不会是一些 CSS 问题?或者是试图用大背景图片的复杂嵌套元素进行全屏 translate3d 旋转,这超出了 Safari 的处理能力?
更新 1:
我在缩小问题范围方面取得了进展。
发生的情况是,当我进行 translate3d 翻转时“窥视”的元素恰好是之前通过 translate3d 定位的子元素。
我想用 translate3d 转换的“页面”结构:
<div id="frontbackwrapper">
<div id="front">
</div><!--/front-->
<div id="back">
</div><!--/back-->
</div><!--/frontbackwrapper-->
这可以自己工作。前面的 div 被替换为具有卡片翻转效果的后面的 div。
问题是在进行整页翻转之前,我已经#front
使用 translate3d 为 div 中的一些元素设置了动画:
<div id="frontbackwrapper">
<div id="front">
<div class="modal"></div>
</div><!--/front-->
<div id="back">
</div><!--/back-->
</div><!--/frontbackwrapper-->
示例 CSS:
.modal {
width: 800px;
height: 568px;
position: absolute;
left: 112px;
z-index: 100;
-webkit-transition-duration: 1s;
-webkit-transform: translate3d(0,-618px,0); /* set off screen by default */
}
.modal.modalOn {
-webkit-transform: translate3d(0,80px,0); /* slides the div into place */
}
如果--而不是使用 translate3d--我只是用top
样式重新定位 div 或转换top
属性,我不会得到窥视问题。当然,这意味着我必须分别放弃流畅的动画或硬件加速。
在这一点上,它看起来像一个 webkit 错误。我会继续玩它。如果有人以前遇到过这种情况并找到了解决方法,我会全力以赴!