まず、setInterval ではなくrequestAnimationFrameを使用する必要があります。アニメーション用に特別に作られています。ポール・アイリッシュによると..
なぜ使用する必要があるのですか?
ブラウザーは、同時実行アニメーションを単一のリフローおよび再描画サイクルにまとめて最適化し、より忠実度の高いアニメーションを実現できます。たとえば、CSS トランジションまたは SVG SMIL と同期した JS ベースのアニメーション。さらに、表示されていないタブでアニメーション ループを実行している場合、ブラウザーはそれを実行し続けません。つまり、CPU、GPU、およびメモリの使用量が少なくなり、バッテリー寿命が大幅に長くなります。
あなたが話していることを実装する方法は次のとおりです
// all credit to paul irish on this part
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
function growCircle () {
// code to make the circle bigger
}
function rotateCross() {
// code to make the cross rotate
}
(function animate(){
requestAnimFrame(animate);
if ( /* code to tell if the circle has finished growing */ ) {
rotateCross();
} else {
growCircle();
}
})();