Fantastic, I had no idea it could be done with CSS! I'm doing something similar for my students, attempting to animate a scrolling vex flow display for sight reading practice. I took a slightly different approach since my app is React-based. I'm calling VexFlow once in my component constructor to draw to the SVG, and then updating the SVG glyphs directly on each frame. The animation is very smooth and looks great!
The obstacle I'm hitting though, is that for the life of me I cannot get TickContext.setX() to affect the horizontal positions of the notes. I want to display arbitrary rhythms and scroll at a constant speed, but my playhead has to jump around to handle generous spacing around 8th notes and 16th notes. I need the simplest formatting possible, just proportional spacing. I've tried Gregory's method, as well as the method used in SimpleFormatter mentioned here last September, but so far nothing has worked.
I'm using Easy Score, so I am assigning notes --> voice --> system and then trying to reset the TickContext right before I call Factory.draw(). Maybe Easy Score is the wrong approach and I need to use the lower level API throughout? Help!