leumas-private-shared
Version:
Private React JSX Package For Leumas Shared Components, Headers, Footers, Asides, Login Pages, API Key Manager and much more. Styles and everything reusable to avoid DRY code across all of our subdomains
46 lines (38 loc) • 1.26 kB
JSX
import React, { useEffect } from 'react';
import './FlashLight.css';
const FlashLight = ({ children }) => {
useEffect(() => {
const isTouchDevice = () => {
try {
document.createEvent('TouchEvent');
return true;
} catch (e) {
return false;
}
};
const getMousePosition = (e) => {
const mouseX = !isTouchDevice() ? e.pageX : e.touches[0].pageX;
const mouseY = !isTouchDevice() ? e.pageY : e.touches[0].pageY;
const flashlight = document.getElementById('flashlight');
if (flashlight) {
flashlight.style.setProperty('--Xpos', mouseX + 'px');
flashlight.style.setProperty('--Ypos', mouseY + 'px');
}
};
document.addEventListener('mousemove', getMousePosition);
document.addEventListener('touchmove', getMousePosition);
return () => {
document.removeEventListener('mousemove', getMousePosition);
document.removeEventListener('touchmove', getMousePosition);
};
}, []);
return (
<div className="flashlight-container">
<div id="flashlight"></div>
<div className="flashlight-content">
{children}
</div>
</div>
);
};
export default FlashLight;