diff --git a/packages/framer-motion/src/gestures/hover.ts b/packages/framer-motion/src/gestures/hover.ts index 13826b5ebe..37bb0df473 100644 --- a/packages/framer-motion/src/gestures/hover.ts +++ b/packages/framer-motion/src/gestures/hover.ts @@ -7,15 +7,16 @@ import { extractEventInfo } from "../events/event-info" function handleHoverEvent( node: VisualElement, event: PointerEvent, - isActive: boolean + lifecycle: "Start" | "End" ) { const { props } = node if (node.animationState && props.whileHover) { - node.animationState.setActive("whileHover", isActive) + node.animationState.setActive("whileHover", lifecycle === "Start") } - const callback = props[isActive ? "onHoverStart" : "onHoverEnd"] + const eventName = ("onHover" + lifecycle) as "onHoverStart" | "onHoverEnd" + const callback = props[eventName] if (callback) { frame.postRender(() => callback(event, extractEventInfo(event))) } @@ -23,19 +24,14 @@ function handleHoverEvent( export class HoverGesture extends Feature { mount() { - const { current, props } = this.node + const { current } = this.node if (!current) return - this.unmount = hover( - current, - (startEvent) => { - handleHoverEvent(this.node, startEvent, true) + this.unmount = hover(current, (startEvent) => { + handleHoverEvent(this.node, startEvent, "Start") - return (endEvent) => - handleHoverEvent(this.node, endEvent, false) - }, - { passive: !props.onHoverStart && !props.onHoverEnd } - ) + return (endEvent) => handleHoverEvent(this.node, endEvent, "End") + }) } unmount() {}