import React, {useState, useEffect} from 'react';
import getClassName from '../utils/getClassName';
function TextMouseSpooler({frequentSaying, lessFrequentSaying, mousePosition}) {
const [mousePositionSinceLastSignificantMove, setMousePositionSinceLastSignificantMove] = useState({x: 0, y: 0});
const [textObjectArray, setTextObjectArray] = useState([]);
useEffect(() => {
const distance = Math.sqrt(Math.pow(mousePosition.x - mousePositionSinceLastSignificantMove.x, 2) + Math.pow(mousePosition.y - mousePositionSinceLastSignificantMove.y, 2));
if (distance > 20) {
setTextObjectArray(textObjectArray.concat({
position: mousePositionSinceLastSignificantMove,
saying: Math.random() > 0.5 ? frequentSaying : lessFrequentSaying,
timeAtCreation: Date.now(),
}));
setMousePositionSinceLastSignificantMove(mousePosition);
if (Date.now() % 1000 === 0) {
for (let i = 0; i < textObjectArray.length; i++) {
if (Date.now() - textObjectArray[i].timeAtCreation > 5000) {
textObjectArray.splice(i, 1);
}
}
}
}
}, [mousePosition]);
return (
<div className="TextMouseSpooler">
{}
{textObjectArray.map((textObject, index) => {
return (
<span
key={index}
className="text-mouse-spooler-span"
style={{
top: textObject.position.y,
left: textObject.position.x,
}}
>
{textObject.saying}
</span>
);
})}
</div>
);
}
export default TextMouseSpooler;