SlideShare a Scribd company logo
1 of 31
Download to read offline
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

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

Observer Pattern Khali Young 2006 Aug
Observer Pattern Khali Young 2006 AugObserver Pattern Khali Young 2006 Aug
Observer Pattern Khali Young 2006 Aug
melbournepatterns
 
Event handling63
Event handling63Event handling63
Event handling63
myrajendra
 

Similar to Pointer Events Working Group update / TPAC 2023 / Patrick H. Lauke (20)

Observer Pattern
Observer PatternObserver Pattern
Observer Pattern
 
Observer Pattern Khali Young 2006 Aug
Observer Pattern Khali Young 2006 AugObserver Pattern Khali Young 2006 Aug
Observer Pattern Khali Young 2006 Aug
 
Android App Development - 13 Broadcast receivers and app widgets
Android App Development - 13 Broadcast receivers and app widgetsAndroid App Development - 13 Broadcast receivers and app widgets
Android App Development - 13 Broadcast receivers and app widgets
 
FIWARE Complex Event Processing
FIWARE Complex Event ProcessingFIWARE Complex Event Processing
FIWARE Complex Event Processing
 
FIWARE Complex Event Processing
FIWARE Complex Event ProcessingFIWARE Complex Event Processing
FIWARE Complex Event Processing
 
Advancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and GesturesAdvancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and Gestures
 
Reactive programming with tracker
Reactive programming with trackerReactive programming with tracker
Reactive programming with tracker
 
Saving lives with rx java
Saving lives with rx javaSaving lives with rx java
Saving lives with rx java
 
Dealing with the need for Infrastructural Support in Ambient Intelligence
Dealing with the need for Infrastructural Support in Ambient IntelligenceDealing with the need for Infrastructural Support in Ambient Intelligence
Dealing with the need for Infrastructural Support in Ambient Intelligence
 
Android Implementation using MQTT Protocol
Android Implementation using MQTT ProtocolAndroid Implementation using MQTT Protocol
Android Implementation using MQTT Protocol
 
Funtional Reactive Programming with Examples in Scala + GWT
Funtional Reactive Programming with Examples in Scala + GWTFuntional Reactive Programming with Examples in Scala + GWT
Funtional Reactive Programming with Examples in Scala + GWT
 
iOS Development (Part 3) - Additional GUI Components
iOS Development (Part 3) - Additional GUI ComponentsiOS Development (Part 3) - Additional GUI Components
iOS Development (Part 3) - Additional GUI Components
 
Webx 2010
Webx 2010Webx 2010
Webx 2010
 
Event handling63
Event handling63Event handling63
Event handling63
 
Devfest 2023 - Service Weaver Introduction - Taipei.pdf
Devfest 2023 - Service Weaver Introduction - Taipei.pdfDevfest 2023 - Service Weaver Introduction - Taipei.pdf
Devfest 2023 - Service Weaver Introduction - Taipei.pdf
 
Scaling Experimentation & Data Capture at Grab
Scaling Experimentation & Data Capture at GrabScaling Experimentation & Data Capture at Grab
Scaling Experimentation & Data Capture at Grab
 
RxJava@Android
RxJava@AndroidRxJava@Android
RxJava@Android
 
RxJava 2 Reactive extensions for the JVM
RxJava 2  Reactive extensions for the JVMRxJava 2  Reactive extensions for the JVM
RxJava 2 Reactive extensions for the JVM
 
Android 3
Android 3Android 3
Android 3
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every day
 

More from Patrick Lauke

More from Patrick Lauke (20)

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

Recently uploaded

Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
FIDO Alliance
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
FIDO Alliance
 

Recently uploaded (20)

Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & Ireland
 
Introduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptxIntroduction to FIDO Authentication and Passkeys.pptx
Introduction to FIDO Authentication and Passkeys.pptx
 
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
Human Expert Website Manual WCAG 2.0 2.1 2.2 Audit - Digital Accessibility Au...
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptxHarnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
Harnessing Passkeys in the Battle Against AI-Powered Cyber Threats.pptx
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdfLinux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
Linux Foundation Edge _ Overview of FDO Software Components _ Randy at Intel.pdf
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
ADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptxADP Passwordless Journey Case Study.pptx
ADP Passwordless Journey Case Study.pptx
 
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...Hyatt driving innovation and exceptional customer experiences with FIDO passw...
Hyatt driving innovation and exceptional customer experiences with FIDO passw...
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4j
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!State of the Smart Building Startup Landscape 2024!
State of the Smart Building Startup Landscape 2024!
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Design Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptxDesign Guidelines for Passkeys 2024.pptx
Design Guidelines for Passkeys 2024.pptx
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
 
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
 

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