【问题标题】:Weird trailing effect during css animationcss动画期间奇怪的拖尾效果
【发布时间】:2021-03-10 21:19:26
【问题描述】:

当我遇到这个奇怪的问题时,我正在制作动画。下面是一个带有单个 div 的代码 sn-p,并应用了一些样式和动画。

当我运行代码时,在动画过程中,我可以在正方形的最右侧看到一个奇怪的拖尾效果。

*{
    margin: 0px;
    padding: 0px;
}

body{
    background-image: radial-gradient(pink, hotpink);
    height: 100vh;
    width: 100vw;
    display: flex;
    justify-content:center;
    align-items: center;
}

@keyframes zoominout{
    0%{
        transform: scale(1.0);
    }
    50%{
        transform: scale(1.1);
    }
    100%{
        transform: scale(1.0);
    }
}

#outer{
    border: 2px solid black;
    height: 450px;
    width: 450px;
    animation: zoominout infinite 4s;
}
<div id="outer"></div>

每当我单击任意位置或按任意按钮时,轨迹都会消失。

这可能是什么原因造成的,我应该如何解决这个问题?

此外,此问题仅发生在边框上。没有国界,就没有问题。

更新 - 此问题仅适用于 chrome 浏览器。使用 firefox 时,看不到任何尾随行。

【问题讨论】:

  • 您使用的是哪个浏览器?我看不出有什么问题!尝试使用不同的浏览器
  • @PrathameshKosht​​i 我正在使用 Chrome。我尝试在 Firefox 中运行相同的代码,并且运行良好。此问题仅与 Chrome 相关还是其他原因?
  • 不太确定,因为现在我在 macbook 上使用 chrome,但我什么也没看到
  • @PrathameshKosht​​i 这很有趣,因为我在 IOS 上也没有看到 Chrome(或 Safari)的问题,除了微小的闪烁,所以它有点依赖于浏览器和操作系统。
  • @AHaworth 是的,我想是的

标签: css google-chrome animation css-animations


【解决方案1】:

似乎是您的边界在缩放,但不知何故以褪色的形式留在后面。

如果我们举一个更简单的例子——没有边界半径,没有弯曲,你可以在这个正方形上清楚地看到它。第一个动画持续时间为 4 秒,并显示单独的线条,这是你得到的,但在圆圈上以小形式显示。第二个动画持续时间为 40 秒,并且显示更连续,正如预期的那样,因为在此期间可能会有更多帧。

这是sn-p:

<style>
@keyframes zoominout{
    0%{
        transform: scale(1.0);
    }
    50%{
        transform: scale(1.1);
    }
    100%{
        transform: scale(1.0);
    }
}

#outer{
    border: 2px solid black;
    border-color: magenta;
    height: 450px;
    width: 450px;
    animation: zoominout infinite 4s;
    background-color: cyan;
}
</style>
<div id="outer"></div>

那么,该怎么办呢?不知何故,边界并没有完全消失,而是正在消失。

更新:这里有一个快速的解决方法 - 动画尺寸而不是缩放。我知道这不是制作动画的最佳方式(因为它可能不使用 GPU ???),但它似乎有效。当然你想把你的圆圈(现在是一个正方形)放入一个具有实际宽度的容器中,然后使用 %s。它适用于 Windows 10 上的 Chrome、Edge、Firefox 以及 IOS14 上的 Safari 和 Chrome。它还消除了之前在 Firefox 和 Safari 上看到的轻微闪烁(它们在初始代码上的效果都比 Win10 上的 Edge 或 Chrome 更好)。

带有解决方法的代码段:

<style>
*{
    margin: 0px;
    padding: 0px;
}

body{
    background-image: radial-gradient(pink, hotpink);
    height: 100vh;
    width: 100vw;
    display: flex;
    justify-content:center;
    align-items: center;
}

@keyframes zoominout{
    0%{
        width: var(--w);
        height: var(--w);
    }
    50%{
        width: calc(var(--w) * 1.1);
        height: calc(var(--w) * 1.1);
    }
    100%{
        width: var(--w);
        height: var(--w);
    }
}


#outer{
    --w: 450px;/* you don't have to use a CSS variable but this is just to make it easier to change the width/height if you need to */
    border: 2px solid black;
    height: var(--w);
    width: var(--w);
    animation: zoominout infinite 4s;
}

</style>
  <div id="outer"></div>

【讨论】:

  • 是的。这种效果只出现在边框上。没有边界,没关系。但是,我只能在 chrome 浏览器中看到这个问题。在 Firefox 中,它按预期运行,没有尾随行。那么这个问题是否仅与浏览器有关,还是与其他问题有关?
  • 我看到了对 Edge 和 Chrome (WIndows 10) 的影响,这是可以预料的,因为它们基本相同。 Windows10 上的 Firefox 没有显示它,尽管我的笔记本电脑上有一点闪烁效果,我猜这是因为重新计算了边框并达到了像素的一小部分。 IOS 14 (iPad) 上的 Safari 没有显示它,但仍然有非常轻微的闪烁效果。 IOS 上的 Chrome 也不显示。
  • 那么我们能做些什么吗?还是我们必须更换浏览器?
  • 有一个使用动画尺寸的解决方法。我会做一个 sn-p 并在几分钟内将其添加到答案中。
  • 我已将解决方法 sn-p 和解释放在答案中。我知道动画尺寸不是最有效的 - 但它比为用户提供错误的结果要好,而且我的笔记本电脑似乎没有任何不良影响(例如,风扇在重复动画时没有出现)所以它很可能在我们尝试过的所有浏览器上都可以使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多