PointerEvent has x/y properties defined relative to the viewport origin and pageX/Y properties relative to the document's origin.
Originally, we were using pageX/Y, but it's easy to forget that the API is different than Point2D. (In fact, I forgot when I threw together ParallaxDemo. I got lucky and discovered the x/y properties on PointerEvent when I realized it should have been broken, but somehow worked.)
Most of the time, the distinction won't matter, since:
- we care about deltas between points more than their absolute values,
- users won't typically scroll during an interaction, and
- most interactions we've built use fixed positioning (viewport-relative) anyway.
Hence, I'm using the simpler x/y now. If we ever need to build an interaction that supports user scrolling, we can add support for pageX/Y, but for now, let's do the simple thing.