requestAnimationFrame() used where possible