SlideShare a Scribd company logo
Pointer Events Working Group update
changes and additions in Pointer Events Level 3
Patrick H. Lauke / TPAC 2023
What are Pointer Events
To better address devices with different input types, this specification
defines a more abstract form of input, called a pointer.
A higher level event model based on mouse events, but also covering pen,
touch, and other (future) pointing devices.
Latest stable recommendation: Pointer Events Level 2 (4 April 2019)
Work has since been ongoing towards Pointer Events Level 3 (Editor's
draft August 2023)
Pointer Events Level 3
Beyond clarifications for undocumented cases/scenarios that came out of
implementation experience and developer adoption, Level 3 includes a few
new features:
▪ pointerrawupdate event to better react to fast movements
▪ getCoalescedEvents() and getPredictedEvents() methods
▪ altitudeAngle and azimuthAngle properties
▪ bonus: redefinition of click , auxclick , and contextmenu
pointerrawupdate
The problem
For performance reasons, user agents MAY delay the dispatch of
pointermove events (as they already do for mousemove ).
For very fast pointer movements, user agents will generally "coalesce"
individual small movements into a single pointermove event.
While good for performance, this can be problematic for scenarios where
authors want to accurately track high-frequency pointer movements – for
instance, drawing applications.
Demo: basic drawing application using pointermove
pointerrawupdate
The new pointerrawupdate event aims help make these applications
work smoother.
Compared to the pointermove event, user agents SHOULD dispatch
pointerrawupdate as soon as possible.
Demo: basic drawing application using pointerrawupdate
pointerrawupdate
May have a performance impact – authors should keep code executed in
response to pointerrawupdate to a minimum (e.g. just store
coordinates)
Note: even though pointerrawupdate should fire as soon as possible,
the user agent may still coalesce a few individual events/changes.
getCoalescedEvents()
The problem
For very fast pointer movements, user agents will generally "coalesce"
individual small movements into a single
pointermove or pointerrawupdate event
Again, for certain applications, authors may want access to all the
separate events that were coalesced by the user agent
getCoalescedEvents()
The new getCoalescedEvents() method gives authors access to all the
raw position/property changes that were coalesced into an event
Best of both worlds – allows for increased granularity, without incurring
additional performance penalties:
▪ listen to regular pointermove (or pointerrawupdate ) events
▪ then process all the coalesced events for that event
foo.addEventListener("pointermove", (e)=> {
if (e.getCoalescedEvents) {
for (let ec of e.getCoalescedEvents()) {
// access the coalesced event properties
// like clientX/clientY (more granular)
}
} else {
// fallback: use the pointermove event's
// properties instead
}
});
Demo: basic drawing application using pointermove and
getCoalescedEvents()
getPredictedEvents()
The problem
Even with the use of pointerrawupdate and getCoalescedEvents() ,
certain applications – such as drawing applications – may still exhibit
perceived latency.
There will always be a gap, no matter how small, between an event being
dispatched and the application reacting to it.
getPredictedEvents()
Some user agents have built-in algorithms which, after a series of
confirmed pointer movements, can predict likely future movements.
The new getPredictedEvents() method gives authors access to these
predicted events
These can be helpful in scenarios like drawing applications: draw ahead
to predicted positions to reduce perceived latency (but discard these
speculative/predicted points when the real points are received).
foo.addEventListener("pointermove", (e)=> {
// regular processing of the event,
// and/or any coalesced events
if (e.getPredictedEvents) {
for (let ep of e.getPredictedEvents()) {
// do something with the predicted events,
// such as speculatively drawing ahead
}
}
});
Demo: basic drawing application using pointermove and
getPredictedEvents()
Out of scope
Both getCoalescedEvents() and getPredictedEvents()
only define the methods/API to access coalesced and predicted events
The Pointer Events specification itself does not define how events are
coalesced or predicted – this is left up to individual implementations
(operating system / user agent dependent)
altitudeAngle / azimuthAngle
The problem
The original Pointer Events specification defined tiltX and tiltY
properties to convey the orientation of a stylus
These properties are, admittedly, not very intuitive for developers
tiltX : The plane angle (in degrees, in the range of [-90,90]) between
the Y-Z plane and the plane containing both the transducer (e.g.
pen/stylus) axis and the Y axis …
tiltY : The plane angle … between the X-Z plane and the plane
containing both the transducer … axis and the X axis …
altitudeAngle / azimuthAngle
Pointer Events Level 3 "borrows" the altitudeAngle and
azimuthAngle properties from Touch Events
(introduced when Apple expanded Touch Events to support Pencil on iPad)
altitudeAngle : The altitude (in radians) of the transducer (e.g.
pen/stylus), in the range [0,π/2] — where 0 is parallel to the surface (X-Y
plane), and π/2 is perpendicular to the surface. …
azimuthAngle : The azimuth angle (in radians) of the transducer …, in
the range [0, 2π] — where 0 represents a transducer whose cap is pointing
in the direction of increasing X values (point to "3 o'clock" if looking straight
down) on the X-Y plane, and the values progressively increase when going
clockwise …
altitudeAngle / azimuthAngle
User agents MUST provide both the classic tiltX / tiltY and the new
altitudeAngle / azimuthAngle properties
The specification includes algorithm for converting between the two sets
Demo: pen tracker (using WebGL)
Bonus:
click / auxclick / contextmenu
Redefining events in UI Events
The specification redefines click , auxclick , and contextmenu as
Pointer Events
This change is already in the latest UI Events working draft
Possible new application: determine what type of input caused one of
these events to be fired using the pointerType property
Demo: basic button with pointerType check
Thank you…
Currently working on last few blockers for Level 3 and Web Platform Tests
Hoping to go to Candidate Recommendation (CR) shortly
▪ Pointer Events Level 3 (Editor's Draft)
▪ github.com/w3c/pointerevents

More Related Content

PDF
Pointer events
Martin Wittemann
 
PDF
Getting touchy - an introduction to touch and pointer events / TPAC 2016 / Li...
Patrick Lauke
 
PPT
Multi Touch And Gesture Event Interface And Types
Ethan Cha
 
KEY
openFrameworks 007 - events
roxlu
 
PPTX
Deep Dive Time Series Anomaly Detection in Azure with dotnet
Marco Parenzan
 
PDF
Events.pdf
stephanedjeukam1
 
PDF
The Wonderful-Amazing-Orientation-Motion-Sensormatic Machine
Andrew Fisher
 
PDF
Using Multi-Touch and Gestures with Qt
account inactive
 
Pointer events
Martin Wittemann
 
Getting touchy - an introduction to touch and pointer events / TPAC 2016 / Li...
Patrick Lauke
 
Multi Touch And Gesture Event Interface And Types
Ethan Cha
 
openFrameworks 007 - events
roxlu
 
Deep Dive Time Series Anomaly Detection in Azure with dotnet
Marco Parenzan
 
Events.pdf
stephanedjeukam1
 
The Wonderful-Amazing-Orientation-Motion-Sensormatic Machine
Andrew Fisher
 
Using Multi-Touch and Gestures with Qt
account inactive
 

More from Patrick Lauke (20)

PDF
These (still) aren't the SCs you're looking for ... (mis)adventures in WCAG 2...
Patrick Lauke
 
PDF
These aren't the SCs you're looking for ... (mis)adventures in WCAG 2.x inter...
Patrick Lauke
 
PDF
These aren't the SCs you're looking for ... (mis)adventures in WCAG 2.x inter...
Patrick Lauke
 
PDF
Too much accessibility - good intentions, badly implemented / Public Sector F...
Patrick Lauke
 
PDF
Styling Your Web Pages with Cascading Style Sheets / EDU course / University ...
Patrick Lauke
 
PDF
Evaluating web sites for accessibility with Firefox / Manchester Digital Acce...
Patrick Lauke
 
PDF
Managing and educating content editors - experiences and ideas from the trenc...
Patrick Lauke
 
PDF
Implementing Web Standards across the institution: trials and tribulations of...
Patrick Lauke
 
PDF
Geolinking content - experiments in connecting virtual and physical places / ...
Patrick Lauke
 
PDF
All change for WCAG 2.0 - what you need to know about the new accessibility g...
Patrick Lauke
 
PDF
Web Accessibility - an introduction / Salford Business School briefing / Univ...
Patrick Lauke
 
PDF
Doing it in style - creating beautiful sites, the web standards way / WebDD /...
Patrick Lauke
 
PDF
Web standards pragmatism - from validation to the real world / Web Developers...
Patrick Lauke
 
PDF
Ian Lloyd/Patrick H. Lauke: Accessified - practical accessibility fixes any w...
Patrick Lauke
 
PDF
The state of the web - www.salford.ac.uk / 2007
Patrick Lauke
 
PDF
Keyboard accessibility - just because I don't use a mouse doesn't mean I'm se...
Patrick Lauke
 
PDF
WAI-ARIA An introduction to Accessible Rich Internet Applications / JavaScrip...
Patrick Lauke
 
PDF
WAI-ARIA An introduction to Accessible Rich Internet Applications / CSS Minsk...
Patrick Lauke
 
PDF
WAI-ARIA An introduction to Accessible Rich Internet Applications / AccessU 2018
Patrick Lauke
 
PDF
Getting touchy - an introduction to touch and pointer events / Frontend NE / ...
Patrick Lauke
 
These (still) aren't the SCs you're looking for ... (mis)adventures in WCAG 2...
Patrick Lauke
 
These aren't the SCs you're looking for ... (mis)adventures in WCAG 2.x inter...
Patrick Lauke
 
These aren't the SCs you're looking for ... (mis)adventures in WCAG 2.x inter...
Patrick Lauke
 
Too much accessibility - good intentions, badly implemented / Public Sector F...
Patrick Lauke
 
Styling Your Web Pages with Cascading Style Sheets / EDU course / University ...
Patrick Lauke
 
Evaluating web sites for accessibility with Firefox / Manchester Digital Acce...
Patrick Lauke
 
Managing and educating content editors - experiences and ideas from the trenc...
Patrick Lauke
 
Implementing Web Standards across the institution: trials and tribulations of...
Patrick Lauke
 
Geolinking content - experiments in connecting virtual and physical places / ...
Patrick Lauke
 
All change for WCAG 2.0 - what you need to know about the new accessibility g...
Patrick Lauke
 
Web Accessibility - an introduction / Salford Business School briefing / Univ...
Patrick Lauke
 
Doing it in style - creating beautiful sites, the web standards way / WebDD /...
Patrick Lauke
 
Web standards pragmatism - from validation to the real world / Web Developers...
Patrick Lauke
 
Ian Lloyd/Patrick H. Lauke: Accessified - practical accessibility fixes any w...
Patrick Lauke
 
The state of the web - www.salford.ac.uk / 2007
Patrick Lauke
 
Keyboard accessibility - just because I don't use a mouse doesn't mean I'm se...
Patrick Lauke
 
WAI-ARIA An introduction to Accessible Rich Internet Applications / JavaScrip...
Patrick Lauke
 
WAI-ARIA An introduction to Accessible Rich Internet Applications / CSS Minsk...
Patrick Lauke
 
WAI-ARIA An introduction to Accessible Rich Internet Applications / AccessU 2018
Patrick Lauke
 
Getting touchy - an introduction to touch and pointer events / Frontend NE / ...
Patrick Lauke
 
Ad

Recently uploaded (20)

PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PDF
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PDF
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PPTX
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
Ad

Pointer Events Working Group update / TPAC 2023 / Patrick H. Lauke

  • 1. Pointer Events Working Group update changes and additions in Pointer Events Level 3 Patrick H. Lauke / TPAC 2023
  • 2. What are Pointer Events To better address devices with different input types, this specification defines a more abstract form of input, called a pointer. A higher level event model based on mouse events, but also covering pen, touch, and other (future) pointing devices. Latest stable recommendation: Pointer Events Level 2 (4 April 2019) Work has since been ongoing towards Pointer Events Level 3 (Editor's draft August 2023)
  • 3. Pointer Events Level 3 Beyond clarifications for undocumented cases/scenarios that came out of implementation experience and developer adoption, Level 3 includes a few new features: ▪ pointerrawupdate event to better react to fast movements ▪ getCoalescedEvents() and getPredictedEvents() methods ▪ altitudeAngle and azimuthAngle properties ▪ bonus: redefinition of click , auxclick , and contextmenu
  • 5. The problem For performance reasons, user agents MAY delay the dispatch of pointermove events (as they already do for mousemove ). For very fast pointer movements, user agents will generally "coalesce" individual small movements into a single pointermove event. While good for performance, this can be problematic for scenarios where authors want to accurately track high-frequency pointer movements – for instance, drawing applications.
  • 6. Demo: basic drawing application using pointermove
  • 7. pointerrawupdate The new pointerrawupdate event aims help make these applications work smoother. Compared to the pointermove event, user agents SHOULD dispatch pointerrawupdate as soon as possible.
  • 8. Demo: basic drawing application using pointerrawupdate
  • 9. pointerrawupdate May have a performance impact – authors should keep code executed in response to pointerrawupdate to a minimum (e.g. just store coordinates) Note: even though pointerrawupdate should fire as soon as possible, the user agent may still coalesce a few individual events/changes.
  • 11. The problem For very fast pointer movements, user agents will generally "coalesce" individual small movements into a single pointermove or pointerrawupdate event Again, for certain applications, authors may want access to all the separate events that were coalesced by the user agent
  • 12. getCoalescedEvents() The new getCoalescedEvents() method gives authors access to all the raw position/property changes that were coalesced into an event Best of both worlds – allows for increased granularity, without incurring additional performance penalties: ▪ listen to regular pointermove (or pointerrawupdate ) events ▪ then process all the coalesced events for that event
  • 13. foo.addEventListener("pointermove", (e)=> { if (e.getCoalescedEvents) { for (let ec of e.getCoalescedEvents()) { // access the coalesced event properties // like clientX/clientY (more granular) } } else { // fallback: use the pointermove event's // properties instead } });
  • 14. Demo: basic drawing application using pointermove and getCoalescedEvents()
  • 16. The problem Even with the use of pointerrawupdate and getCoalescedEvents() , certain applications – such as drawing applications – may still exhibit perceived latency. There will always be a gap, no matter how small, between an event being dispatched and the application reacting to it.
  • 17. getPredictedEvents() Some user agents have built-in algorithms which, after a series of confirmed pointer movements, can predict likely future movements. The new getPredictedEvents() method gives authors access to these predicted events These can be helpful in scenarios like drawing applications: draw ahead to predicted positions to reduce perceived latency (but discard these speculative/predicted points when the real points are received).
  • 18. foo.addEventListener("pointermove", (e)=> { // regular processing of the event, // and/or any coalesced events if (e.getPredictedEvents) { for (let ep of e.getPredictedEvents()) { // do something with the predicted events, // such as speculatively drawing ahead } } });
  • 19. Demo: basic drawing application using pointermove and getPredictedEvents()
  • 20. Out of scope Both getCoalescedEvents() and getPredictedEvents() only define the methods/API to access coalesced and predicted events The Pointer Events specification itself does not define how events are coalesced or predicted – this is left up to individual implementations (operating system / user agent dependent)
  • 22. The problem The original Pointer Events specification defined tiltX and tiltY properties to convey the orientation of a stylus These properties are, admittedly, not very intuitive for developers
  • 23. tiltX : The plane angle (in degrees, in the range of [-90,90]) between the Y-Z plane and the plane containing both the transducer (e.g. pen/stylus) axis and the Y axis … tiltY : The plane angle … between the X-Z plane and the plane containing both the transducer … axis and the X axis …
  • 24. altitudeAngle / azimuthAngle Pointer Events Level 3 "borrows" the altitudeAngle and azimuthAngle properties from Touch Events (introduced when Apple expanded Touch Events to support Pencil on iPad)
  • 25. altitudeAngle : The altitude (in radians) of the transducer (e.g. pen/stylus), in the range [0,π/2] — where 0 is parallel to the surface (X-Y plane), and π/2 is perpendicular to the surface. … azimuthAngle : The azimuth angle (in radians) of the transducer …, in the range [0, 2π] — where 0 represents a transducer whose cap is pointing in the direction of increasing X values (point to "3 o'clock" if looking straight down) on the X-Y plane, and the values progressively increase when going clockwise …
  • 26. altitudeAngle / azimuthAngle User agents MUST provide both the classic tiltX / tiltY and the new altitudeAngle / azimuthAngle properties The specification includes algorithm for converting between the two sets
  • 27. Demo: pen tracker (using WebGL)
  • 28. Bonus: click / auxclick / contextmenu
  • 29. Redefining events in UI Events The specification redefines click , auxclick , and contextmenu as Pointer Events This change is already in the latest UI Events working draft Possible new application: determine what type of input caused one of these events to be fired using the pointerType property
  • 30. Demo: basic button with pointerType check
  • 31. Thank you… Currently working on last few blockers for Level 3 and Web Platform Tests Hoping to go to Candidate Recommendation (CR) shortly ▪ Pointer Events Level 3 (Editor's Draft) ▪ github.com/w3c/pointerevents