@react-three/xr
Version:
VR/AR for react-three-fiber
46 lines (45 loc) • 1.59 kB
JavaScript
import { forwardHtmlEvents } from '@pmndrs/pointer-events';
import { addEffect, useThree } from '@react-three/fiber';
import { useEffect } from 'react';
export function PointerEvents({ batchEvents, clickThesholdMs, clickThresholdMs, contextMenuButton, customSort, dblClickThresholdMs, filter, forwardPointerCapture, intersectEveryFrame, pointerTypePrefix, }) {
const domElement = useThree((s) => s.gl.domElement);
const alwaysRendering = useThree((s) => s.frameloop === 'always');
const camera = useThree((s) => s.camera);
const scene = useThree((s) => s.scene);
useEffect(() => {
const { destroy, update } = forwardHtmlEvents(domElement, () => camera, scene, {
batchEvents: batchEvents ?? alwaysRendering,
clickThesholdMs,
clickThresholdMs,
contextMenuButton,
customSort,
dblClickThresholdMs,
filter,
forwardPointerCapture,
intersectEveryFrame,
pointerTypePrefix,
});
const cleanupUpdate = addEffect(update);
return () => {
cleanupUpdate();
destroy();
};
}, [
domElement,
camera,
scene,
alwaysRendering,
batchEvents,
clickThresholdMs,
clickThesholdMs,
contextMenuButton,
customSort,
dblClickThresholdMs,
filter,
forwardPointerCapture,
intersectEveryFrame,
pointerTypePrefix,
]);
return null;
}
export const noEvents = () => ({ enabled: false, priority: 0 });