Я пытался сделать вращатель рулетки с помощью React. Но я имею дело с некоторыми проблемами, связанными с переходами и ролями.
Это первая версия алгоритма: Функции обратного вызова выполняются каждый раз, когда изменяется реквизит, названный победителем
const slideRef = useRef(null);
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
const spinnerAnimation = useCallback(() => {
const numbers = {
0: 560,
11: -410,
5: 160,
10: 320,
6: 480,
9: 720,
7: 880,
8: 1050,
1: 1135,
14: 960,
2: 800,
13: 640,
3: 400,
12: 240,
4: 80,
};
const cycles = Math.floor(getRandomArbitrary(2, 4));
const dev = getRandomArbitrary(0, 80);
const scrollAmount = 480 + numbers[winner] + dev + 1200 * cycles;
slideRef.current.classList.remove('spin_animation');
slideRef.current.style = 'background-position-x: -212.5px';
setTimeout(() => {
slideRef.current.classList.add('spin_animation');
slideRef.current.style = `background-position-x: ${`-${scrollAmount}px
}, 10);
}, [winner]);
. Для этого я использую фон и отображаю каждое расстояние:
My проблема в том, что есть время, когда оно не останавливается на нужном числе, а также когда мы изменяем размер окна браузера, оно ломается. Есть ли другой способ сделать спиннер или как это улучшить?