【问题标题】:CSS keyframed animation jumpy in IE10IE10 中的 CSS 关键帧动画跳跃
【发布时间】:2013-04-20 11:59:40
【问题描述】:

我创建了一个简单的循环动画,它使用translate 函数来左右移动元素。这在 Chrome、Firefox 中运行良好,并且事件在 IE10 中启动良好,但是当动画反转元素跳转时。

我在 CodePen 上创建了一个问题示例,只需在 IE10 中打开它:http://codepen.io/anon/full/cxtza(已更新)

我试图通过硬编码关键帧 0%、50% 和 100% 而不是 from/to 并使用 alternate 方向属性来缓解这个问题,我尝试使用 translateX 而不是 3D 但到目前为止不走运。

更新:该错误已报告https://connect.microsoft.com/IE/feedback/details/785881/animated-transform-with-translate-and-percentage-value-jumps-ie10

【问题讨论】:

  • 我的 Chrome 上的动画很跳跃。请在此处发布代码。
  • @i_like_robots 对我来说,你的笔在 IE10 和 Chrome 中看起来一模一样。我错过了什么?

标签: css internet-explorer-10 css-animations css-transforms keyframe


【解决方案1】:

% 转换

使用% 值对transform 属性设置动画时似乎会出现此问题。如果您使用px 值对tranform 属性进行动画处理,它在IE10 中运行良好。同样,如果您使用 % 值为 margin-left 等其他属性设置动画,它运行良好。

在为transform 属性设置动画时,IE 似乎无法很好地处理% 值。我建议要么使用% 以外的单位,或者为transform 以外的属性设置动画。

使用 px 值的示例

Updated demo (在 IE10、Firefox、Chrome、Safari 和 Opera 中测试良好)

@-webkit-keyframes pulse {
  from { -webkit-transform: translateX(0); }
  to   { -webkit-transform: translateX(100px); }
}
@-moz-keyframes pulse {
  from { -moz-transform: translateX(0); }
  to   { -moz-transform: translateX(100px); }
}
@keyframes pulse {
  from { transform: translateX(0); }
  to   { transform: translateX(100px); }
}

.blob {
    width: 320px;
    height: 320px;
    background: red;
    -webkit-animation: pulse 2s linear infinite alternate;
       -moz-animation: pulse 2s linear infinite alternate;
            animation: pulse 2s linear infinite alternate;
}

使用左边距的示例

Updated demo (在 IE10、Firefox、Chrome、Safari 和 Opera 中测试良好)

@-webkit-keyframes pulse {
    from { margin-left: 0%; }
    to   { margin-left: 20%; }
}
@-moz-keyframes pulse {
    from { margin-left: 0%; }
    to   { margin-left: 20%; }
}
@keyframes pulse {
    from { margin-left: 0%; }
    to   { margin-left: 20%; }
}

.blob {
    width: 320px;
    height: 320px;
    background: red;
    -webkit-animation: pulse 2s linear infinite alternate;
       -moz-animation: pulse 2s linear infinite alternate;
            animation: pulse 2s linear infinite alternate;
}

【讨论】:

  • 感谢您抽出宝贵时间对此进行调查,它显然指向了浏览器错误。出于性能原因,我想将动画保留在 GPU 上,所以我想我现在必须使用 CSS 像素而不是相对单位(ems 也会出现问题)。
  • 我注意到了同样的问题,有什么解决办法吗?
  • 我想知道是否有解决此问题的方法?在 IE11 中似乎仍然是一个问题?
  • 如果您使用 IE11 和 Win7(Win8 和 Win10 可以)并为关键帧动画使用 em 或 % 值,也会出现此错误。同样,使用 px 解决了这个问题。
  • 不幸的是,这对于 rotate 的错误没有帮助,它只支持 deg 而不是 px 值。
猜你喜欢
  • 2015-12-25
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多