gpt4 book ai didi

jquery - CSS 动画在填充动画时会产生闪烁 "bounding box"

转载 作者:行者123 更新时间:2023-12-01 01:43:37 25 4
gpt4 key购买 nike

我正在尝试对圆形 div 进行动画处理,以产生类似波纹的效果,填充其容器。应该有一个初始波纹(边界),然后主要形状扩展以填充容器。

我通过动画圆形 div 的边框宽度并结合填充来实现波纹,从而将边框向外推。

问题是,当填充动画时,圆形 div 的边界框会闪烁白色。如果我删除动画的填充部分,并且只设置边框宽度的动画,则不会出现闪烁,所以我知道是填充导致了问题。

@keyframes circle {
0% {
width:0.001px;
border-width:0px;
padding:0px;
}
50% {
width:0.001px;
border-width:100px;
padding:400px;
}
100% {
width:125%;
border-width:100px;
padding:400px;
}
}

Here's a fiddle展示。单击灰色框将其激活。

编辑:在 Firefox 中测试后,它按预期工作。可能是特定于 webkit 的?

编辑 2:我见过的用于修复通用“动画期间闪烁”错误的 2 个常见解决方案是添加样式

-webkit-transform-style: preserve-3d;

-webkit-backface-visibility: hidden;

到有问题的元素。我已经尝试过这些,但都没有修复它。

最初,我使用多个圆形 div 和一系列具有过渡的类(表示动画的各种状态)来完成此动画,然后使用 setInterval 延迟触发这些类。现在我对 CSS 动画更加熟悉了,我正在尝试重新编码它以使其对 CPU 更友好,因为旧方法在旧笔记本电脑上运行。我假设与多个圆形 div 相比,调用单个动画而不是不断添加和删除类会更有效?

最佳答案

错误导致

webkit 错误与动画填充有关(正如您所指出的)。在此示例中,我用宽度和高度替换了 paddings Angular 色。

其他更改

  • 单击类时添加动画,然后删除该类。这样动画就可以反复重用。

  • 我更改了关键帧,以便在动画结束时,白色慢慢变成透明。

关于前缀的说明

示例 1

根据您的喜好进行调整,边框与背景位于同一元素上,因此它们会同时移动。

$("#circleCont").click(function() {
$(".circle").addClass('animated');
setTimeout(function() {
$(".circle").removeClass('animated');
}, 4000);
});
.circle {
position: absolute;
top: 50%;
left: 50%;
margin: auto;
border: 0 solid #FFF;
display: block;
border-radius: 50%;
background-color: white;
background-clip: content-box;
transform: translate(-50%, -50%);
z-index: 2;
}
#circleCont {
display: inline-block;
position: absolute;
width: 100%;
top: 50%;
transform: translateY(-50%);
z-index: 2;
box-shadow: inset 0px 0px 0px 0px rgba(0, 0, 0, 0);
transition: box-shadow 0.1s;
}
#circleCont:after {
content: '';
display: block;
margin-top: 100%;
}
#hero {
width: 600px;
height: 400px;
background-color: #ddd;
position: absolute;
overflow: hidden;
}
.animated {
animation: circle 4s forwards
}
@keyframes circle {
0% {
width: 0;
border-width: 0px;
height: 0;
}
25% {
border-width: 100px;
width: 400px;
height: 400px;
}
50% {
height: 800px;
width: 800px;
border-width: 100px;
padding: 400px;
background: #FFF;
}
100% {
height: 800px;
width: 800px;
border-width: 100px;
padding: 400px;
background: transparent;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="hero">
<div id="circleCont">
<div class="circle"></div>
</div>
</div>

示例 2

在此示例中,边框设置在不同的元素上。背景元素被赋予一个animation-delay,以便它在边框动画之后稍微开始。

$("#circleCont").click(function() {
$('.circle').addClass('animated');
$('.border').addClass('animated');
setTimeout(function() {
$('.circle').removeClass('animated');
$('.border').removeClass('animated');
}, 4500);
});
.circle {
position: absolute;
top: 50%;
left: 50%;
margin: auto;
overflow: hidden;
display: block;
border-radius: 50%;
background-color: white;
transform: translate(-50%, -50%);
z-index: 2;
}
.border {
position: absolute;
top: 50%;
left: 50%;
margin: auto;
overflow: hidden;
display: block;
border-radius: 50%;
background-color: transparent;
transform: translate(-50%, -50%);
z-index: 2;
border: solid 100px transparent;
}
#circleCont {
display: inline-block;
position: absolute;
width: 100%;
top: 50%;
transform: translateY(-50%);
z-index: 2;
box-shadow: inset 0px 0px 0px 0px rgba(0, 0, 0, 0);
transition: box-shadow 0.1s;
}
#circleCont:after {
content: '';
display: block;
margin-top: 100%;
}
#hero {
width: 600px;
height: 400px;
background-color: #ddd;
position: absolute;
overflow: hidden;
}
.circle.animated {
animation: circle 4s forwards;
animation-delay: .5s;
}
.border.animated {
animation: circle 4s forwards;
animation-delay: 0;
}
@keyframes circle {
0% {
width: 0;
height: 0;
border-color: #FFF;
}
50% {
height: 800px;
width: 800px;
background: #FFF;
border-color: #FFF;
}
100% {
height: 800px;
width: 800px;
border-color: #FFF;
background: transparent;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="hero">
<div id="circleCont">
<div class="circle"></div>
<div class="border"></div>
</div>
</div>

关于jquery - CSS 动画在填充动画时会产生闪烁 "bounding box",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com