hover.mjs 967 B

1234567891011121314151617181920212223242526272829
  1. import { hover, frame } from 'motion-dom';
  2. import { extractEventInfo } from '../events/event-info.mjs';
  3. import { Feature } from '../motion/features/Feature.mjs';
  4. function handleHoverEvent(node, event, lifecycle) {
  5. const { props } = node;
  6. if (node.animationState && props.whileHover) {
  7. node.animationState.setActive("whileHover", lifecycle === "Start");
  8. }
  9. const eventName = ("onHover" + lifecycle);
  10. const callback = props[eventName];
  11. if (callback) {
  12. frame.postRender(() => callback(event, extractEventInfo(event)));
  13. }
  14. }
  15. class HoverGesture extends Feature {
  16. mount() {
  17. const { current } = this.node;
  18. if (!current)
  19. return;
  20. this.unmount = hover(current, (_element, startEvent) => {
  21. handleHoverEvent(this.node, startEvent, "Start");
  22. return (endEvent) => handleHoverEvent(this.node, endEvent, "End");
  23. });
  24. }
  25. unmount() { }
  26. }
  27. export { HoverGesture };