【发布时间】:2019-02-18 21:08:46
【问题描述】:
我不知道网页渲染的生命周期——所以在下面的例子中我有两颗心——一颗由 js 动画,另一颗由 CSS 动画。当我使用alert 消息阻止事件循环时,CSS 心脏保持动画。
let scale = true;
setInterval(() => {
$('.animate-js').css('transform', `scale(${scale ? 1.4 : 1})`);
scale = !scale;
}, 1000)
body {
text-align: center;
}
.heart {
white-space: nowrap;
display: inline-block;
font-size: 150px;
color: #e00;
transform-origin: center;
}
.animate-css {
animation: beat 2s steps(2, end) infinite;
}
/* Heart beat animation */
@keyframes beat {
to {
transform: scale(1.4);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="heart">I
<div class="animate-css heart">♥</div> CSS</div>
<div class="heart">I
<div class="animate-js heart">♥</div> JS</div>
<br/>
<button onClick="alert('hurray!')">
I love it too
</button>
我很确定这是因为 CSS 动画是在 javascript 事件循环之外处理的,但我不确定我的假设是否正确。最接近解释内部原理的文章是 - Rendering Performance。但是,它还不够深入。如果有人解释这一点或在我开始寻找规格之前向我指出一些易于理解的材料来阅读/观看,我将不胜感激。 在此先感谢
【问题讨论】:
-
developers.google.com/web/fundamentals/design-and-ux/animations/… 与使用的线程有关。请参阅页面底部的“CSS 与 JavaScript 性能”。
-
非常感谢@Gerard,您分享的链接很棒!
标签: javascript css browser