W3C

Touch Events Specification

W3C Working Draft 05 May 2011

This version:
http://www.w3.org/TR/2011/WD-touch-events-20110505/
Latest published version:
http://www.w3.org/TR/touch-events/
Latest editor's draft:
http://dvcs.w3.org/hg/webevents/raw-file/default/touchevents.html
Editors:
Doug Schepers, W3C
Sangwhan Moon, Opera Software ASA
Matt Brubeck, Mozilla

Abstract

The Touch Interface specification defines a set of low-level events that represent one or more points of contact with a touch-sensitive surface, and changes of those points with respect to the surface and any DOM elements displayed upon it (e.g. for touch screens) or associated with it (e.g. for drawing tablets without displays). It also addresses pen-tablet devices, such as drawing tablets, with consideration toward stylus capabilities.

Status of This Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document was published by the Web Events Working Group as a First Public Working Draft. This document is intended to become a W3C Recommendation. If you wish to make comments regarding this document, please send them to public-webevents@w3.org (subscribe, archives). All feedback is welcome.

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

Table of Contents

1. Introduction

This section is non-normative.

User Agents that run on terminals which provide touch input to use web applications typically use interpreted mouse events to allow users to access interactive web applications. However, these interpreted events, being normalized data based on the physical touch input, tend to have limitations on delivering the intended user experience. Additionally, it is not possible to handle concurrent input regardless of device capability, due to constraints of mouse events: both system level limitations and legacy compatibility.

Meanwhile, native applications are capable of handling both cases with the provided system APIs.

The Touch Events specification provides a solution to this problem by specifying interfaces to allow web applications to directly handle touch events, and multiple touch points for capable devices.

2. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words must, must not, required, should, should not, recommended, may, and optional in this specification are to be interpreted as described in [RFC2119].

This specification defines conformance criteria that apply to a single product: the user agent that implements the interfaces that it contains.

Implementations that use ECMAScript to implement the APIs defined in this specification must implement them in a manner consistent with the ECMAScript Bindings defined in the Web IDL specification [WEBIDL] as this specification uses that specification and terminology.

A conforming implementation is required to implement all fields defined in this specification.

3. Touch Interface

This interface defines an individual point of contact for a touch event.

interface Touch {
    readonly attribute long  identifier;
    readonly attribute long  screenX;
    readonly attribute long  screenY;
    readonly attribute long  clientX;
    readonly attribute long  clientY;
    readonly attribute long  pageX;
    readonly attribute long  pageY;
    readonly attribute long  radiusX;
    readonly attribute long  radiusY;
    readonly attribute float rotationAngle;
    readonly attribute float force;
};

3.1 Attributes

clientX of type long, readonly
x-coordinate of point relative to the viewport, excluding any scroll offset
No exceptions.
clientY of type long, readonly
y-coordinate of point relative to the viewport, excluding any scroll offset
No exceptions.
force of type float, readonly
a relative value of pressure applied, in the range 0 to 1, where 0 is no pressure, and 1 is the highest level of pressure the touch device is capable of sensing; 0 if no value is known. In environments where force is known, the absolute pressure represented by the force attribute, and the sensitivity in levels of pressure, may vary.

Issue: Consider aligning with other "channels" and values from Ink Markup Language (InkML), in addition to force, e.g. adding angle, clientZ, rotation, etc.

No exceptions.
identifier of type long, readonly
An identification number for each touch point, unique to that touch point per session.

The algorithm for determining the identifier value is as follows:

  1. if there are no other active touch event sessions, the value of identifier must be 0
  2. if there is at least one active touch event session, the value of identifier must be the lowest integer not currently used by any active Touch object in any active touch event session
No exceptions.
pageX of type long, readonly
x-coordinate of point relative to the viewport, including any scroll offset
No exceptions.
pageY of type long, readonly
y-coordinate of point relative to the viewport, including any scroll offset
No exceptions.
radiusX of type long, readonly
the radius of the ellipse which most closely circumscribes the touching area (e.g. finger, stylus) along the x-axis, in pixels of the same scale as screenX; 1 if no value is known. The value must be positive.

Issue: What are units of radiusX/radiusY? CSS Pixels?

No exceptions.
radiusY of type long, readonly
the radius of the ellipse which most closely circumscribes the touching area (e.g. finger, stylus) along the y-axis, in pixels of the same scale as screenY; 1 if no value is known. The value must be positive.
No exceptions.
rotationAngle of type float, readonly

the angle (in degrees) that the ellipse described by radiusX and radiusY is rotated clockwise about its center; 0 if no value is known. The value must be greater than or equal to 0 and less than 90.

If the ellipse described by radiusX and radiusY is circular, then rotationAngle has no effect. The user agent may use 0 as the value in this case, or it may use any other value in the allowed range. (For example, the user agent may use the rotationAngle value from the previous touch event, to avoid sudden changes.)

No exceptions.
screenX of type long, readonly
x-coordinate of point relative to the screen
No exceptions.
screenY of type long, readonly
y-coordinate of point relative to the screen
No exceptions.

4. TouchList Interface

This interface defines a list of individual points of contact for a touch event.

interface TouchList {
    readonly attribute unsigned long length;
    getter Touch item (in unsigned long index);
    Touch        identifiedTouch (in long identifier);
};

4.1 Attributes

length of type unsigned long, readonly
returns the number of Touches in the list
No exceptions.

4.2 Methods

identifiedTouch
returns the first Touch with long identifier from the list
ParameterTypeNullableOptionalDescription
identifierlong
No exceptions.
Return type: Touch
item
returns the Touch with index index from the list, sorted in order from latest to earliest
ParameterTypeNullableOptionalDescription
indexunsigned long
No exceptions.
Return type: getter Touch

5. TouchEvent Interface

This interface defines the touchstart, touchend, touchmove, touchenter, touchleave, and touchcancel event types.

interface TouchEvent : UIEvent {
    readonly attribute TouchList    touches;
    readonly attribute TouchList    targetTouches;
    readonly attribute TouchList    changedTouches;
    readonly attribute boolean      altKey;
    readonly attribute boolean      metaKey;
    readonly attribute boolean      ctrlKey;
    readonly attribute boolean      shiftKey;
    readonly attribute EventTarget? relatedTarget;
    void initTouchEvent (in DOMString type, in boolean canBubble, in boolean cancelable, in AbstractView view, in long detail, in boolean ctrlKey, in boolean altKey, in boolean shiftKey, in boolean metaKey, in TouchList touches, in TouchList targetTouches, in TouchList changedTouches);
};

5.1 Attributes

altKey of type boolean, readonly
true if the alt (Alternate) key modifier is activated; otherwise false
No exceptions.
changedTouches of type TouchList, readonly
a list of Touches for every point of contact which contributed to the event
No exceptions.
ctrlKey of type boolean, readonly
true if the ctrl (Control) key modifier is activated; otherwise false
No exceptions.
metaKey of type boolean, readonly
true if the meta (Meta) key modifier is activated; otherwise false. On some platforms this attribute may map to a differently-named key modifier.
No exceptions.
relatedTarget of type EventTarget, readonly, nullable
identifies a secondary EventTarget related to a touch event. This attribute is used with the touchenter event to indicate the EventTarget the touch point exited, and with the touchleave event to indicate the EventTarget the touch point entered. For other event types, this attribute must be null.
No exceptions.
shiftKey of type boolean, readonly
true if the shift (Shift) key modifier is activated; otherwise false
No exceptions.
targetTouches of type TouchList, readonly
a list of Touches for every point of contact currently touching the surface, which started on the same target
No exceptions.
touches of type TouchList, readonly
a list of Touches for every point of contact currently touching the surface
No exceptions.

5.2 Methods

initTouchEvent
initializes a TouchEvent created through the DocumentEvent interface.
ParameterTypeNullableOptionalDescription
typeDOMString
canBubbleboolean
cancelableboolean
viewAbstractView
detaillong
ctrlKeyboolean
altKeyboolean
shiftKeyboolean
metaKeyboolean
touchesTouchList
targetTouchesTouchList
changedTouchesTouchList
No exceptions.
Return type: void

5.3 The touchstart event

A user agent must dispatch this event type to indicate when the user places a touch point on the touch surface.

The target of this event must be an Element.

5.4 The touchend event

A user agent must dispatch this event type to indicate when the user removes a touch point from the touch surface, also including cases where the touch point physically leaves the touch surface, such as being dragged off of the screen.

The target of this event must be the same Element that received the touchstart event when this touch point was placed on the surface, even if the touch point has since moved outside the interactive area of the target element.

The touch point or points that were removed must be included in the changedTouches attribute of the TouchEvent, and must not be included in the touches and targetTouches attributes.

5.5 The touchmove event

A user agent must dispatch this event type to indicate when the user moves a touch point along the touch surface.

The target of this event must be the same Element that received the touchstart event when this touch point was placed on the surface, even if the touch point has since moved outside the interactive area of the target element.

If the values of radiusX, radiusY, rotationAngle, or force are known, then the user agent also must dispatch this event type to indicate when any of these attributes of a touch point have changed.

Note that the rate at which the user agent sends touchmove events is implementation-defined, and may depend on hardware capabilities and other implementation details.

5.6 The touchenter event

A user agent must dispatch this event type to indicate when a touch point moves onto the interactive area defined by a DOM element. Events of this type must not bubble.

5.7 The touchleave event

A user agent must dispatch this event type to indicate when a touch point moves off the interactive area defined by a DOM element. Events of this type must not bubble.

5.8 The touchcancel event

A user agent must dispatch this event type to indicate when a touch point has been disrupted in an implementation-specific manner, such as a synchronous event or action originating from the UA canceling the touch, or the touch point leaving the document window into a non-document area which is capable of handling user interactions. (e.g. The UA's native user interface, plug-ins) A user agent may also dispatch this event type when the user places more touch points on the touch surface than the device or implementation is configured to store, in which case the earliest Touch object in the TouchList should be removed.

6. DocumentTouch Interface

The DocumentTouch interface provides a mechanism by which the user can create Touch and TouchList objects. The DocumentTouch interface must be implemented on the Document object.

interface DocumentTouch {
    Touch     createTouch (in AbstractView view, in EventTarget target, in long identifier, in long pageX, in long pageY, in long screenX, in long screenY, in optional long clientX, in optional long clientY, in optional long radiusX, in optional long radiusY, in optional float rotationAngle, in optional float force);
    TouchList createTouchList (in Touch[] touches);
    TouchList createTouchList (in Touch touch);
};

6.1 Methods

createTouch
Creates a Touch object with the specified attributes.
ParameterTypeNullableOptionalDescription
viewAbstractView
targetEventTarget
identifierlong
pageXlong
pageYlong
screenXlong
screenYlong
clientXlong
clientYlong
radiusXlong
radiusYlong
rotationAnglefloat
forcefloat
No exceptions.
Return type: Touch
createTouchList
Creates a TouchList object containing the specified Touch objects.
ParameterTypeNullableOptionalDescription
touchesTouch[]
No exceptions.
Return type: TouchList
createTouchList
Creates a TouchList object containing a single Touch.
ParameterTypeNullableOptionalDescription
touchTouch
No exceptions.
Return type: TouchList

Issue: Does createTouch need to take both pageX/pageY and clientX/clientY as parameters? If not, which pair should be removed?

7. Interaction with Mouse Events

The user agent may dispatch both touch events and mouse events [DOM-LEVEL-2-EVENTS] in response to the same user input. If the user agent dispatches both touch events and mouse events in response to a single user action, then the touchstart event type must be dispatched before any mouse event types for that action. If the preventDefault method of touchstart or touchmove is called, the user agent should not dispatch any mouse event that would be a consequential result of the the prevented touch event.

The default actions and ordering of any further touch and mouse events are implementation-defined, except as specified elsewhere.

8. Glossary

active touch event session
A conceptual state in which there is at least one instance of a TouchEvent event with at least one non-empty TouchList.
touch point
The coordinate point at which a pointer (e.g finger or stylus) intersects the target surface of an interface. This may apply to a finger touching a touch-screen, or an digital pen writing on a piece of paper.

9. Issues

This section is non-normative.

The working group maintains a list of open issues in this specification. These issues may be addressed in future revisions of the specification.

A. Acknowledgements

This section is non-normative.

Many thanks to the WebKit engineers for developing the model used as a basis for this spec, Neil Roberts (SitePen) for his summary of WebKit touch events, Peter-Paul Koch (PPK) for his write-ups and suggestions, Robin Berjon for developing the ReSpec.js spec authoring tool, and the WebEvents WG for their many contributions.

Many others have made additional comments as the spec developed, which have led to steady improvements. Among them are Matthew Schinckel, Andrew Grieve, and Cathy Chan. If I inadvertently omitted your name, please let me know.

B. References

B.1 Normative references

[DOM-LEVEL-2-EVENTS]
Tom Pixley. Document Object Model (DOM) Level 2 Events Specification. 13 November 2000. W3C Recommendation. URL: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Internet RFC 2119. URL: http://www.ietf.org/rfc/rfc2119.txt
[WEBIDL]
Cameron McCormack. Web IDL. 19 December 2008. W3C Working Draft. (Work in progress.) URL: http://www.w3.org/TR/2008/WD-WebIDL-20081219

B.2 Informative references

No informative references.