React hook useInteraction() allows to get the user interaction type: touch, mouse or keyboard.
▶︎ Demo
Using yarn:
yarn add use-interactionUsing npm:
npm i use-interaction --saveImport the hook:
import useInteraction from 'use-interaction'If the user interaction changes, the pointerType, pointerHistory, and pointerAccuracy values will be updated.
Keyboard strokes has no effect on the interaction type when the user is typing in a form element (input, select, and textarea). Only keyboard navigation is monitored.
const [pointerType, pointerHistory, pointerAccuracy] = useInteraction()import React from 'react'
import useInteraction from 'use-interaction'
export const Demo = () => {
const [pointerType, pointerHistory, pointerAccuracy] = useInteraction()
return (
<code>
pointer: {pointerType || `none`} (can
{pointerType !== 'mouse' && 'not'} hover)
<br />
history: {`[${pointerHistory.join(', ')}]`}
<br />
accuracy: {pointerAccuracy || `none`}
<br />
</code>
)
}object
| Property Name | Type | Description | Default Value |
|---|---|---|---|
| initial | boolean |
to not wait an action on the part of the user, the initial interaction type can be defined to be effective as soon as the page is loaded (i.e. touch) |
null |
import { isMobile } from 'react-device-detect'
const [pointerType, pointerHistory, pointerAccuracy] = useInteraction({
initial: isMobile ? 'touch' : 'mouse',
})array
| Returned Array | Type | Description | Default Value |
|---|---|---|---|
| 1st element (pointerType) | string |
current input of the user interaction: touch, mouse or keyboard (i.e. touch) |
null |
| 2nd element (pointerHistory) | Array.<string> |
previous inputs of the user interaction listed in reverse chronological order (i.e. ['mouse', 'keyboard']} |
[] |
| 3rd element (pointerAccuracy) | number |
[Experimental] max size of contact geometry collected from the current pointer (i.e. 23) |
null |