Kon*_*ong 8 css css3 css-animations
我定义了一个CSS3 动画(并关联@keyframes
):
animation: myAnimation 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
Run Code Online (Sandbox Code Playgroud)
即使你看不到它,如果父元素有,这个动画是否正在运行(和消耗资源)visibility: hidden
?
是的,即使父容器有动画,动画也会继续运行,visibility:hidden
因为该元素仍然存在并且只是隐藏.在下面的代码片段中,您可以验证.output
div 的内容,以查看它是否继续运行并marginLeft
不断更改.
window.onload = function() {
var animEl = document.querySelector('.animated');
var outputEl = document.querySelector('.output');
window.setTimeout(function() {
outputEl.textContent = 'Margin left when visibility becomes hidden: ' + window.getComputedStyle(animEl).marginLeft;
document.querySelector('.wrapper').style.visibility = 'hidden';
window.setTimeout(function() {
outputEl.textContent = 'Margin left when visibility becomes visible: ' + window.getComputedStyle(animEl).marginLeft;
document.querySelector('.wrapper').style.visibility = 'visible';
}, 1000);
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
.wrapper{
white-space: nowrap;
}
.wrapper > div {
display: inline-block;
height: 100px;
width: 100px;
border: 1px solid;
}
.animated {
animation: move 3s linear infinite;
}
@keyframes move {
to {
margin-left: 300px;
}
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class='wrapper'>
<div class='animated'></div>
<div class='sibling'></div>
</div>
<div class='output'></div>
Run Code Online (Sandbox Code Playgroud)
根据W3C规范,只有设置display: none
终止正在运行的动画(我们可以采取它,因为也不会启动动画).
将display属性设置为'none'将终止应用于该元素及其后代的任何正在运行的动画.如果元素的显示为"none",则将显示更新为"none"以外的值将启动"animation-name"属性应用于元素的所有动画,以及应用于具有除"none"以外的显示的后代的所有动画. '没有'.
正如你可以在下面的摘要中看到,当动画结束display
设为none
并从第一个关键帧重新启动时,它被设置回block
.
window.onload = function() {
var animEl = document.querySelector('.animated');
var outputEl = document.querySelector('.output');
window.setTimeout(function() {
outputEl.textContent = 'Margin left when display becomes none: ' + window.getComputedStyle(animEl).marginLeft;
document.querySelector('.wrapper').style.display = 'none';
window.setTimeout(function() {
outputEl.textContent = 'Margin left when display becomes block: ' + window.getComputedStyle(animEl).marginLeft;
document.querySelector('.wrapper').style.display = 'block';
}, 1000);
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
.wrapper {
white-space: nowrap;
}
.wrapper > div {
display: inline-block;
height: 100px;
width: 100px;
border: 1px solid;
}
.animated {
animation: move 3s linear infinite;
}
@keyframes move {
to {
margin-left: 300px;
}
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class='wrapper'>
<div class='animated'></div>
<div class='sibling'></div>
</div>
<div class='output'></div>
Run Code Online (Sandbox Code Playgroud)