Przejdź do głównej zawartości

27. Randomizer decyzji

Aplikacja do losowania decyzji — koło fortuny, losowy wybór z listy, tasowanie kolejności. Przydatne do “co dziś zjeść?”, “kto odpowiada?” itp.

// Koło fortuny SVG
function SpinWheel({ items, onSpin }) {
const [rotation, setRotation] = useState(0);
const [spinning, setSpinning] = useState(false);
function spin() {
if (spinning) return;
setSpinning(true);
const extraSpins = 5 * 360; // 5 pełnych obrotów
const randomAngle = Math.random() * 360;
const totalRotation = rotation + extraSpins + randomAngle;
setRotation(totalRotation);
setTimeout(() => {
setSpinning(false);
// Oblicz wybrany segment
const normalizedAngle = totalRotation % 360;
const segmentAngle = 360 / items.length;
const selectedIndex = Math.floor((360 - normalizedAngle % 360) / segmentAngle) % items.length;
onSpin(items[selectedIndex]);
}, 3000); // czas animacji CSS
}
const segmentAngle = 360 / items.length;
return (
<div style={{ transform: `rotate(${rotation}deg)`, transition: spinning ? 'transform 3s ease-out' : 'none' }}>
{/* Segmenty SVG */}
</div>
);
}
  • Lista opcji do dodawania i usuwania
  • Losowanie jednej opcji z listy (animacja shake/highlight)
  • Historia ostatnich wylosowań
  • Minimalna lista 2 opcji (walidacja)
Ocena: 3.0

Powodzenia!

Randomizer to projekt bardzo wdzięczny — każdy chce go użyć! Koło fortuny SVG wymaga matematyki (segmenty jako ścieżki SVG z path lub polygon), ale jest do zrobienia. W wariancie A zacznij od prostego losowania z highlight — koło dodaj w B. Dźwięk kręcenia (Web Audio API lub plik MP3) to dobry finishing touch!