Mine aren't. Mine are programmed as functions that, when called, take one step of the animation, if it is time to show the next "frame" of an effect that plays out over time.
Naive code uses for loops and dealy() to do the timing. It's harder to break into that until they are finished. Looping.
If I want an animation to stop, I just don't call the function that steps it along anymore.
It seems like you might not have taken the link I posted, which is to a discussion and code examples that show this idea. The code shows how a function can be written so that calling it every 50 milliseconds (say) will let it publish a new step.
It needs embracing the concepts you will come across if you googled
arduino blink without delay
and
arduino two things at once
and
arduino finite state machine
There are some hacks that you could try instead, see
for example. Some are offended by such hacks - I don't argue with success and that approach def works and is easy to see why and wouldn't require a complete change in how you do this kind of thing.
Which way of doing things is still good to,learn at some point, as some,e hacks will on,y get you so far and can be kinda messy.
HTH
a7