◆ setTimeout みたいな感じで 毎フレームごとに関数を実行できます
◆ setTimeout をこれで置き換えたほうが カクつくことがなくなってなめらかです 

requestAnimationFrame というのを知りました

これを使うと毎フレームごとに描画の更新が楽になります
requestAnimationFrame 関数に関数を渡すと画面の描画の直前に関数を実行してくれるらしいです
setInterval みたいのじゃなくて setTimeout のように一回だけの実行なので 関数の最後にもう一度実行する必要があります

こういうコードになります
function step(timestamp) {
// なにかする
requestAnimationFrame(step);
}
requestAnimationFrame(step);
ただ Chrome などベンダープレフィックス付きしかないブラウザもあるのでこのコードを最初にかいたほうがいいみたいです
(function() {
var requestAnimationFrame = window.requestAnimationFrame
|| window.mozRequestAnimationFrame
|| window.webkitRequestAnimationFrame
|| window.msRequestAnimationFrame
window.requestAnimationFrame = requestAnimationFrame
})()

実際 毎フレーム実行してくれるだけで setTimeout(step, 16) とこれといって変わりません
ですが よく見ていると setTimeout だとところどころ カクってしてるところがあるのですがそういうのが起きずにすごくなめらかに動いてます

思いつきで作ったサンプルです
http://var.blog.jp/w/animation/ball-animation.html

ブロック崩しのブロックなくして全方向壁にしたものです
ユーザが操作できるのは ウィンドウサイズを変えることだけです
ディスプレイのせいかもしれないですが いい感じに残像が残って綺麗です

ぼーっとずっと眺められてます


勢い良くウィンドウサイズを小さくしてボールを画面外にもっていくと ウィンドウサイズを戻さないとボールが画面内に戻ってこなくなるので注意です