css - 在 IE11 中使用关键帧 + Sprite 表上的背景位置时闪烁

标签 css internet-explorer css-animations keyframe background-position

所以我有一个包含 16 帧行走动画的 sprite 表,我打算通过使用以下方法更改背景位置来使用关键帧为其设置动画:

animation: abc 0.55s infinite steps(1);


    @keyframes abc {
        0%  {background-position(-2250vh,-10vh);}
        6.67%   {background-position(-2100vh,-10vh);}
        13.33%  {background-position(-1950vh,-10vh);}
        ...
        100%    {background-position(0,-10vh);}
    }

它在 chrome 和 firefox 中运行良好,但在 IE 中,在动画结束时,它会在再次循环之前短暂消失。创建闪烁效果

当我关闭动画并使用控制台手动测试每个位置时,每个帧都正确显示,所以这不是因为定位不正确。

最佳答案

不要为背景位置设置动画。这确实会导致性能问题。相反,使用 img 并让它尽可能高。像这样将其包装在 div 中...

<div class="wrapper">
  <img class="image" src='some-tall-image.png'/>
</div>

将包装高度调整为与所需帧一样高(根据您的关键帧,我假设它为 150 像素)。并在 .wrapper 上设置 overflow:hidden

.wrapper {
  height:150px;
  overflow:hidden;
}

这应该只显示您想要看到的内容。 Sprite 表的单帧。并img

上使用 transform:translateY() 制作动画
@keyframes abc {
    0%  {transform:translateY(-2250vh);}
    6.67%   {transform:translateY(-2100vh);}
    13.33%  {transform:translateY(-1950vh);}
    100%    {transform:translateY(0vh);}
}

.image {
  animation: abc ...;
}

例子。检查一下...

通过使用 steps(8) 我只需要设置动画的 100% 关键帧。剩下的被填满了……神奇!……Also created a JSFiddle for ya

我借了 Sprite 表。对创建者的支持(可以在代码上看到其 url)。图片宽度为 960 像素。所以在我的例子中,我使用了 translateX 而不是 translateY

@keyframes walking {
  100% { 
    transform:translateX(-960px);
   }
}

.wrapper {
  overflow:hidden;
  width:120px;
}

.image {
  animation:walking 500ms steps(8) infinite;
}
<div class="wrapper">
  <img class= "image" src="https://www.adamkhoury.com/demo/sprite_sheets/adam.png">
</div>

关于css - 在 IE11 中使用关键帧 + Sprite 表上的背景位置时闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39674787/

相关文章:

javascript - IE8 中的访问被拒绝错误消息

CSS 不透明动画

css - 当在关键帧中定义高度/宽度时,CSS 动画中的旋转中断

html - 使用 CSS3 制作按钮弹跳

html - 我应该在导航菜单中使用标题标签吗

css - 如何在叠加层上居中加载图像

html - CSS :before style

html - 顶部混合有 svg 形状的全渐变背景

html - 导航栏适用于 chrome 和 firefox,但不适用于 Internet Explorer

javascript - 有没有办法让 javascript 链接在 IE 中打开?