Improve UX
All checks were successful
Publish Docker image / Push Docker image to Docker Hub (push) Successful in 2m37s

This commit is contained in:
Mathias Wagner 2025-02-28 18:09:48 +01:00
parent 1fa7698c1b
commit 7a581749a9
2 changed files with 29 additions and 10 deletions

View File

@ -59,14 +59,35 @@ export const Home = () => {
}; };
const handleFrequencyChange = (e) => { const handleFrequencyChange = (e) => {
if (isPlaying || dragging) { const rect = sliderRef.current.getBoundingClientRect();
const rect = sliderRef.current.getBoundingClientRect(); const x = e.clientX - rect.left;
const x = e.clientX - rect.left; // x position within the element. const clampedX = Math.max(0, Math.min(x, rect.width));
const newFrequency = 20 + (x / rect.width) * 1980; // Scale to frequency range const newFrequency = 20 + (clampedX / rect.width) * 1980;
setFrequency(newFrequency); setFrequency(newFrequency);
}
}; };
useEffect(() => {
const handleMouseMove = (e) => {
if (dragging) {
handleFrequencyChange(e);
}
};
const handleMouseUpGlobal = () => {
if (dragging) {
handleMouseUp();
}
};
document.addEventListener('mousemove', handleMouseMove);
document.addEventListener('mouseup', handleMouseUpGlobal);
return () => {
document.removeEventListener('mousemove', handleMouseMove);
document.removeEventListener('mouseup', handleMouseUpGlobal);
};
}, [dragging]);
useEffect(() => { useEffect(() => {
if (isPlaying) { if (isPlaying) {
if (oscillatorRef.current) { if (oscillatorRef.current) {
@ -134,9 +155,6 @@ export const Home = () => {
<div <div
className="otamatone" className="otamatone"
onMouseDown={handleMouseDown} onMouseDown={handleMouseDown}
onMouseUp={handleMouseUp}
onMouseMove={handleFrequencyChange}
onMouseLeave={handleMouseUp}
> >
<div className="otamatone-neck" ref={sliderRef}> <div className="otamatone-neck" ref={sliderRef}>
<div className="frequency-indicator" style={{ left: `${(frequency - 20) / 1980 * 100}%` }}></div> <div className="frequency-indicator" style={{ left: `${(frequency - 20) / 1980 * 100}%` }}></div>

View File

@ -228,7 +228,8 @@
flex-direction: column flex-direction: column
align-items: center align-items: center
justify-content: center justify-content: center
position: relative position: absolute
left: 0
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2) box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2)
.otamatone-eyes .otamatone-eyes