How to Stop requestAnimationFrame in Vuejs / Javascript

coolgoose profile image Alexandru Bucur Originally published at alexandrubucur.com ・1 min read


let id = window.requestAnimationFrame(fancyFunctionHere)

Now for the longer version. Technically in Vue.js you might have components/mixins that use window.requestAnimationFrame. Since the fancyFunctionHere is used as a callback, everytime you call window.requestAnimationFrame you are going to get a new id that you should use on the destroy method to stop it.

Unfortunately this is not imediately clear on MDN so hopefully my documentation edit with the comment in the code example goes trough.

    created() {
        this.id = window.requestAnimationFrame(

    destroyed() {
        this.id = undefined;

    data() {
        return {
            id: undefined

    methods: {
        fancyFunctionHere() {


Posted on by:

coolgoose profile

Alexandru Bucur


Programmer, Manager and a jack of all trades. Making things work since the dawn of time.


markdown guide

I did not know you could stop it.


Just curious: what situations require cancelling a requested animation on destroy just a few milliseconds after creation?

I don't get it.


I don't understand what you mean unfortunately.

Destroy is the vue method for when the component isn't active on the page. And we are just doing cleanup, it's not a few milliseconds after.


No exactly. You are now cancelling an on create requested animation frame on destroy. But the animation frame will pretty much all the times already being fired.

I was just wondering if you could provide a scenario where a Vue component is created and deleted within a few milliseconds.

The benefit could be when this.fancyFunctionHere kicks off a recursive loop, like an animation.

fancyFunctionHere() {
    this.id = requestAnimationFrame(this.fancyFunctionHere);