【发布时间】:2017-12-17 23:34:20
【问题描述】:
我想我在动画中发现了一个与 Safari 上的百分比相关的错误。我想知道它是否真的是一个错误或 Safari 自定义。
错误说明:
在 Safari 或 iOS 上,当您使用百分比转换开始动画时,位置错误并且动画显示在另一个位置。
在下一个示例中,正方形不应该移动,因为变换是相同的,并且应该从其大小的 10% 10%“边距”开始。一段时间后(如 500 毫秒)通过 JavaScript 添加时会出现该错误。
如果你看到这个错误,你会在 Safari 和 iOS 中看到从 0 0 到 10% 10% 的跳跃。
var div = document.createElement('div');
setTimeout( function(){
document.body.appendChild(div);
}, 500);
div {
background: red;
width: 200px;
height: 200px;
-webkit-transform: translate(10%, 10%);
-webkit-animation: 1s bugAnimation;
}
@-webkit-keyframes bugAnimation {
from {
-webkit-transform: translate(10%, 10%);
background: blue; /* To see the animation */
}
to {
-webkit-transform: translate(10%, 10%);
background: red; /* To see the animation */
}
}
可能的解决方案:
- 按视口单位或其他单位更改百分比值。
显然,选项并非对所有情况都有效,因为我需要百分比,但如果我知道 div 的大小(vw、vh、px...),现在它可能是一个小解决方案。
有人知道这个错误吗?
在 Safari 10.1.1 和 iOS 9.3.1(带有 webview)上测试。
编辑: 真的我需要 translate2D 因为我在页面中心旋转一个 DIV 并且大小未知,例如:
var div = document.createElement('div');
setTimeout( function(){
document.body.appendChild(div);
}, 500);
div {
background: red;
width: 200px;
height: 200px;
position: fixed;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
-webkit-animation: 1s bugAnimation;
-webkit-transform-origin: center center;
}
@-webkit-keyframes bugAnimation {
from {
-webkit-transform: rotate(0deg) translate(-50%, -50%);
}
to {
-webkit-transform: rotate(360deg) translate(-50%, -50%);
}
}
【问题讨论】:
-
嗨,请看一下我更新的答案。
-
为什么在 div 本身和动画中都有变换?据我所知,这就是导致错误的原因
-
@VilleKoo 因为我的 div 以页面为中心。我需要转换才能做到这一点。在动画中我需要旋转 div。我知道错误在于这两个转换,因为 Safari/iOS 计算错误的位置(它需要一个位置,然后使用另一个位置来执行动画)。
-
是否有任何文档可以参考这个错误?我刚刚阅读了the document from Apple,似乎它确实支持
translate()中的百分比。不知道出了什么问题,但现在 macOS 和 iOS Safari 上仍然存在该错误。
标签: javascript ios css animation safari