Considerá que requestAnimationFrame es semejante -me refiero a la manera en que hay que ubicarlo- a setTimeout. Tenés que usarlo dentro de la función y hacer que llame de nuevo a la función, para lograr la animación. Otra cosa, los navegadores lo implementan de manera diferente (prefijos y tiempos de delay). Te recomiendo esta lectura:
http://creativejs.com/resources/requestanimationframe/