Created
February 19, 2024 08:35
-
-
Save adriangalilea/4862f9547a264b7d4d80e70761042519 to your computer and use it in GitHub Desktop.
just testing force touch in a next.js project. Not very useful as I can not make the touchpad vibrate which was my main purpose but still cool to be able to monitor the pressure precisely(only from safari))
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use client"; | |
import React, { useRef, useEffect } from "react"; | |
// Define the extended MouseEvent interface to include the webkitForce property | |
interface ForceMouseEvent extends MouseEvent { | |
webkitForce?: number; | |
} | |
export default function ForceTouchComponent() { | |
const ref = useRef<HTMLDivElement>(null); | |
useEffect(() => { | |
const element = ref.current; | |
if (!element) return; | |
// Define the event handler functions with the correct type | |
const handleEvent = (event: ForceMouseEvent) => { | |
console.log(event.type, event.webkitForce); | |
}; | |
// Use a generic approach to add event listeners | |
const addForceEventListener = ( | |
type: string, | |
listener: (this: HTMLDivElement, ev: ForceMouseEvent) => any, | |
) => { | |
element.addEventListener(type, listener as EventListener); | |
}; | |
// Add event listeners for Force Touch events | |
addForceEventListener("webkitmouseforcewillbegin", handleEvent); | |
addForceEventListener("webkitmouseforcedown", handleEvent); | |
addForceEventListener("webkitmouseforceup", handleEvent); | |
addForceEventListener("webkitmouseforcechanged", handleEvent); | |
// Cleanup function to remove event listeners | |
return () => { | |
element.removeEventListener( | |
"webkitmouseforcewillbegin", | |
handleEvent as EventListener, | |
); | |
element.removeEventListener( | |
"webkitmouseforcedown", | |
handleEvent as EventListener, | |
); | |
element.removeEventListener( | |
"webkitmouseforceup", | |
handleEvent as EventListener, | |
); | |
element.removeEventListener( | |
"webkitmouseforcechanged", | |
handleEvent as EventListener, | |
); | |
}; | |
}, []); | |
return ( | |
<div | |
ref={ref} | |
style={{ width: "100%", height: "100vh", background: "#eee" }} | |
> | |
Force Touch Area | |
</div> | |
); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment