Still not cross-platform, it uses requestAnimationFrame