Molekel supports animation of atoms and surfaces (during animation export only) by updating the atom positions and recomputing the surfaces at each animation step. Both global animation time step and per-molecule time step are configurable, this allows to have e.g. a molecule that is updated every other frame by setting the molecule time step = 2 * global time step.
Global time step dialog
Setting the global animation time step to zero causes the timer to fire as fast as possible; setting the per-molecule timestep to a value < global time step causes the molecule to be updated each time the animation timer fires.
Animation settings (vibration, trajectory, enable/disable) is be set on a per-molecule basis.
The current animation frame is displayed in the status bar.
A video showing how to animate vibrational modes is available here: http://molekel.cscs.ch/video/vibrational_modes_big.htm
Note: The exact time interaval between subsequent frames and the level of responsiveness to user events during animation is platform dependent, e.g. on my Linux box sometimes timer events seem to be received all at once, on the exact same box however everything works fine on Windows.