Purplecoat.js – Simple Labeled Overlays
ellekasai.github.io
ellekasai.github.io
It seems like you could extend this to put more information on the coats. For example, I'd like to use one coat for help text and another to convey state changes. A data-purplecoat-class on the button (that then is applied to the generated div) could describe this easily enough ... in general, are you thinking of adding more power to what can be specified?