【发布时间】:2011-09-27 17:44:14
【问题描述】:
我正在使用 PhoneGap 构建一个 iOS 应用程序。我正在使用 translate3d CSS 动画来创建“翻转”效果。
这在更简单的元素上效果很好......带有前/后 div 的 DIV,可能还有一两个额外的跨度。
但是当我尝试翻转一个更大的元素...即整个屏幕时,我会遇到重绘故障。当我交换 css 类开始转换时会发生什么,“底部”div 的部分弹出“顶部”div,然后翻转发生,然后它们再次弹出。并且不是整个元素都显示出来......它是沿轴拆分的元素的一半,我正在对其进行平移 3d 旋转。
关于什么可能导致这种情况的任何想法或理论?它在 iPad 上作为应用程序和 Safari 桌面上发生的情况相同,因此似乎是 webkit 问题。
会不会是一些 CSS 问题?或者尝试使用 Safari 无法处理的大背景图像的复杂嵌套元素进行全屏 translate3d 旋转?
更新 1:
我在缩小问题范围方面取得了进展。
发生的情况是,当我进行 translate3d 翻转时“窥视”的元素恰好是之前通过 translate3d 定位的子元素。
我想用 translate3d 转换的“页面”结构:
<div id="frontbackwrapper">
<div id="front">
</div><!--/front-->
<div id="back">
</div><!--/back-->
</div><!--/frontbackwrapper-->
这可以自己运行。前面的 div 被替换为具有卡片翻转效果的后面的 div。
问题在于,在进行整页翻转之前,我已经使用 translate3d 对 #front 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 错误。我会继续玩它。如果有人以前遇到过这种情况并找到了解决方法,我会全力以赴!
【问题讨论】:
标签: ios webkit cordova css-animations translate3d