The gesturestart event fires when a WebKit multi-touch gesture begins. Learn initial scale / rotation, ongesturestart, gesturechange / gestureend, portable alternatives, and five try-it labs.
01
Kind
Instance event
02
Type
GestureEvent
03
When
Multiple fingers contact
04
Handler
ongesturestart
05
Key fields
scale / rotation
06
Status
Non-standard
Fundamentals
Introduction
Pinch-to-zoom and two-finger rotate feel natural on phones. WebKit exposed that motion with a small family of events: gesturestart, gesturechange, and gestureend, using the GestureEvent interface.
gesturestart is the “gesture began” signal—ideal for capturing a baseline scale, marking UI as “gesturing,” or calling preventDefault() early. Other browsers never standardized it. Treat it as an optional Safari path—not the only path.
💡
Beginner tip
On Chrome/Firefox desktop, these listeners often never run. Always feature-detect ("ongesturestart" in window or window.GestureEvent) and keep a Touch / Pointer fallback.
Concept
Understanding gesturestart
An instance event that answers: “Did multiple fingers just contact the surface to begin a multi-touch gesture?”
Non-standard WebKit proprietary event (not in a public spec).
Fires when multiple fingers contact the touch surface.
GestureEvent — initial scale (~1.0) and rotation (~0.0).
Handler — ongesturestart or addEventListener("gesturestart", ...).
Family — gesturestart → gesturechange* → gestureend.
Foundation
📝 Syntax
Use the event name with addEventListener, or set the handler property:
gesturestart is marked Non-standard on MDN. Logos use the shared browser-image-sprite.png sprite from this project. Expect WebKit/Safari paths only—always ship a Touch or Pointer fallback.
✓ Non-standard
Element gesturestart
Proprietary WebKit multi-touch gesture begin signal; not a portable primary API.
WebKitNot standardized
Google ChromeNo GestureEvent; use Touch/Pointer
No
Mozilla FirefoxNo GestureEvent; use Touch/Pointer
No
Apple SafariWebKit GestureEvent (esp. iOS)
WebKit
Microsoft EdgeNo GestureEvent; use Touch/Pointer
No
OperaNo GestureEvent; use Touch/Pointer
No
Internet ExplorerNo
No
gesturestartNon-standard
Bottom line: Use GestureEvent only as an optional Safari enhancement; compute pinch with Touch/Pointer Events for everyone else.
Wrap Up
Conclusion
gesturestart is a Non-standard WebKit signal that a multi-touch gesture began. Use it to capture baseline state, feature-detect carefully, and keep Touch / Pointer Events as your portable foundation.
Feature-detect before attaching GestureEvent listeners
Keep a Touch / Pointer pinch implementation as the default
Document that the API is WebKit-only / Non-standard
Test on real iOS Safari hardware when you enhance with it
Pair with gesturechange / gestureend for full lifecycle
❌ Don’t
Ship pinch/zoom that only listens for gesturestart
Assume Chrome or Firefox will fire these events
Ignore browser page-zoom side effects (consider preventDefault)
Treat Non-standard as “fine for all production users”
Overwrite ongesturestart if you need multiple listeners
Summary
Key Takeaways
Knowledge Unlocked
Five things to remember about gesturestart
WebKit gesture began—Non-standard; prefer portable begin on touchstart.
5
Core concepts
📱01
Fingers land
gesture began
Trigger
📄02
GestureEvent
scale · rotation
API
🚫03
Non-standard
WebKit only
Status
🔄04
Touch fallback
portable pinch
Replace
🎯05
Feature-detect
optional enhance
Pattern
❓ Frequently Asked Questions
It is a proprietary WebKit event fired when multiple fingers contact the touch surface, starting a new gesture. After that, gesturechange may fire while fingers move, and gestureend fires when the gesture finishes. MDN marks it Non-standard.
MDN marks it Non-standard only on the Element gesturestart page — not Deprecated and not Experimental. Still avoid it as the primary API in cross-browser apps.
gesturestart begins the gesture, gesturechange fires while fingers move, and gestureend fires when the multi-touch gesture finishes.
It is WebKit-specific. Expect Safari on iOS (and related WebKit contexts). Chrome, Firefox, and Edge generally do not implement this event.
At the start of a gesture, scale is typically 1.0 and rotation is typically 0.0. Use gesturestart to capture baseline state before later updates.
For portable pinch/zoom, prefer Touch Events or Pointer Events and begin tracking when a second finger lands (for example touchstart with touches.length === 2). Feature-detect GestureEvent only as an optional Safari enhancement.
Did you know?
MDN lists gesturestart under “Not part of any specification.” That is why libraries rarely depend on it alone—standards favor Touch Events and Pointer Events for multi-touch.