Tools/Device & System Tests

Vibration Test

Ask the browser to run short, long and continuous buzzes, SOS, heartbeat and a motor check, then build and copy a pattern. A true Vibration API result means the request was accepted, not that the motor ran.

Vibration tests

Press a test to start

0 sFilled = on, empty = off

A true return from navigator.vibrate means the browser accepted the request, not that the motor ran, and not a measured strength or frequency. Vibration needs a user gesture. Android can block the buzz in battery saver, Do Not Disturb, or with system vibration off, even after a true return. iPhone and iPad Safari have no web vibration, so those devices stay on the visual preview. When a call is accepted, the bars are the millisecond list passed to the API.

Pattern builder

Segments (ms)
  1. On
  2. Off
  3. On
  4. Off
  5. On
Tap to record

Each hold becomes an "on" time and each gap becomes an "off". Recording ends 2 seconds after the last release. If this browser can vibrate, a hold asks for a buzz and release calls navigator.vibrate(0). That buzz is not a strength reading. Press Play to send the finished list.

5 values · 1.2 s
navigator.vibrate([200, 100, 200, 100, 600]);

Values alternate on, off, on. A trailing "off" does nothing, so it is dropped from the code. Chrome allows up to 99 values and caps each one at 10 seconds.

How to read this vibration test

Weak, buzzy or rattling motor

The page does not measure the motor. Compare what you feel with the pattern on screen. Start with Short and Long. A healthy motor starts within a few milliseconds and feels even for the whole second. Then run Motor check, which switches on and off faster and faster. A good motor keeps the pulses crisp until they blur into a flutter. If you hear a rattle, a loose motor bracket, a loose screw or a bulky case touching the frame is the usual cause, so test again with the case off. A buzz that is weak, slow to start or missing on the short pulses points to a worn motor or a poor connection, often after a drop or water damage. On a second-hand phone, this is a quick way to check the seller's "fully working" claim.

Haptics vs. vibration: LRA and ERM motors

Cheaper phones use an ERM motor, a small spinning weight. It needs time to spin up and down, so 100 ms taps feel soft and the motor check smears early. Flagship phones use an LRA (linear resonant actuator), which moves a mass back and forth and stops almost instantly, giving the sharp clicks sold as "haptics". Web pages can only switch the motor on or off for a requested time. They cannot set strength, and a true API result is not a strength or frequency reading.

Android settings that block vibration

If nothing happens, the motor may still be fine. Battery saver can block web vibration even after navigator.vibrate returns true. Also check Do Not Disturb and Settings → Sound & vibration, where Samsung, Pixel and other phones have separate toggles for ring, notification and touch vibration. Some phones mute vibration when the ringer is silent instead of vibrate. Try again after each change.

For developers: the Vibration API

Call navigator.vibrate(200) for one buzz, or pass an array that alternates on and off times in milliseconds. The array this page sends is the one in the timeline and the copied snippet. navigator.vibrate(0) stops it. True means the browser accepted the request, not that the motor ran, and not a strength or frequency reading. False means it refused the call. The call needs a user gesture. iPhone and iPad Safari have no Vibration API. An empty or invalid list is ignored, not thrown. Stop again when the page is hidden. Nothing vibrates on load.

Related tools

Check your phone's motion sensors with the accelerometer test and the gyroscope test, look for dead zones with the touch screen test, and count how many fingers your screen tracks with the multi-touch test.

FAQ

Frequently asked questions

Does a true result mean the motor ran?

No. navigator.vibrate returns true when the browser accepts the pattern. That is not proof the motor ran, and it is not a measured strength or frequency. The bars follow that same millisecond list. Feel the phone. If the call returns false, the browser refused it.

Why is there no buzz on iPhone or iPad?

Safari on iPhone and iPad has no Vibration API. Other browsers on those devices use the same WebKit engine, so a page cannot buzz them either. This page does not mark a pattern as successful there. It draws a visual preview only. To try the motor, open Settings, then Sounds & Haptics, and tap a ringtone, or flip the Ring/Silent switch.

Why does Android stay quiet?

The browser accepts a vibration call from a user gesture, such as the tap on a test button. Battery saver can still block the buzz after a true return. Do Not Disturb, a silent ringer, and the vibration switches under Sound can do the same. A desktop browser often has navigator.vibrate and then returns false.

What do the pattern numbers mean?

They are millisecond times, alternating on, off, on. The list in the timeline and the copied snippet is the array passed to navigator.vibrate. A trailing off time does nothing, so it is dropped before the call. Each value is capped at 10 seconds, and the list stops at 99 entries. An empty list, or one whose on times are all zero, is not sent.

How do I stop a vibration?

Press Stop. That clears the on-screen timers and calls navigator.vibrate(0). Hiding the tab or leaving the page cancels it too, including a buzz started from the record pad. Nothing vibrates when the page loads.

Can I use the copied snippet on my own site?

Yes. Copy code writes navigator.vibrate with the same array this page would send. Call it from a click or a tap. Treat a true return as acceptance by the browser, not as a motor measurement. It will not run in iPhone or iPad Safari, and Android may block it in battery saver.