On the previous page we learned to set up presence with an initial value of
{ cursor: null }
—let’s learn how to update presence by taking this and turning
it into realtime cursors.
To get cursor location we can use browser
PointerEvents
.
Switch to Room.tsx
and add a function for onPointerMove
that gets your
cursor location using clientX/clientY
and updates your current presence with
the value.
/Room.tsx
// Update cursor coordinates on pointer movefunction handlePointerMove(e) { const cursor = { x: Math.floor(e.clientX), y: Math.floor(e.clientY) }; updateMyPresence({ cursor });}
Next, create a function for onPointerLeave
that sets the cursor
value to
null
.
/Room.tsx
// Set cursor to null on pointer leavefunction handlePointerLeave(e) { updateMyPresence({ cursor: null });}
And finally, make sure that our div
element spans the screen, add the two
events.
/Room.tsx
return ( <div style={{ width: "100vw", height: "100vh" }} onPointerMove={handlePointerMove} onPointerLeave={handlePointerLeave} > Cursor: {JSON.stringify(myPresence.cursor)} </div>);
If you hover over a preview window, you’ll now see the coordinates of your
cursor, taken from myPresence
! On the next page we’ll use this to render the
cursors.