A phone's linear actuator (like iOS's Taptic Engine) doesn't just switch on and off — it shapes vibration waveforms ranging from a short sharp "tick" to a long soft "hum." A pattern is these pulses laid out along a timeline, expressible on the web as a single array via navigator.vibrate([vibrateMs, pauseMs, vibrateMs, ...]).
Meaning is usually carried by pulse length and count — one short pulse reads as "light acknowledgment" (tap feedback), two quick pulses as "done/success," one long pulse as "warning/error." Vibration is more private than sound (nobody nearby hears it) and survives silent mode, but it's useless if the device isn't in hand and drains battery, so always design it alongside a sound or visual signal. Overusing the same vibration (every keystroke) numbs the fingertip, so save it for moments that actually matter.
Used for keyboard-tap haptics, message/notification arrival, payment confirmation, and hit/fire feedback in game controllers.
When to use
Reach for it at moments that must survive silent mode. Overusing the same pattern numbs it — spend it sparingly.