Анимация колеса рулетки с динамическими данными с сервера

Я работаю над колесом рулетки, которое вращается в 2 фазы.

1) Когда пользователь нажимает кнопку вращения, он просто переходит в бесконечное вращение, пока данные не поступят с сервера.

2) Когда данные поступают, они просто поворачиваются на угол, полученный с сервера.

Мы получаем данные с сервера, потому что они содержат некоторую конфиденциальную информацию, которую мы не хотим отправлять клиенту.

Проблема, с которой я сталкиваюсь, заключается в том, что переход от 1) к 2) не является плавным. Спиннер неожиданно останавливается на случайное время, а затем запускается 2) (Конечное вращение).

Вот моя рабочий пример js, которая представляет собой простейшую репликацию сценария https://jsfiddle.net/ej2c5k7z/6/

HTML:

<div id = "spinning"  style = "background-color: red; display: inline-block">
  abcdefghijkl
</div>

JavaScript:

let element = $("#spinning");

// Simulate random interval for data being fetched from server
let randomIntervalSeconds = Math.random()*10;
console.info(randomIntervalSeconds);
// TODO: keep rotating the element for randomIntervalSeconds
// I used below code along with setInterval with 1001 ms interval
let intervalKey = setInterval(function(){
    element.css({"transform": "rotate(" + 360 + "deg)", "transition-duration": 1 + "s"});
},1001)


setTimeout(function(){
    // Simulate data arrived callback.
  clearInterval(intervalKey);
    element.css({"transform": "rotate(" + (360+48) + "deg)", "transition-duration": 1 + "s"});

}, randomIntervalSeconds*1000)

Мне просто интересно, можно ли вообще поддерживать вращение счетчика (или любого div) бесконечно до тех пор, пока не появятся данные и плавно не перейдет в конечное вращение?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
1 140
1

Ответы 1

Вероятно, это не совсем то, что вы ищете, но, возможно, это может вдохновить вас над линией ворот. Я попытался дать вашему div класс, который заставляет его всегда вращаться, а затем, по истечении тайм-аута, я удаляю вращающуюся анимацию и поворачиваю div на необходимое количество градусов. кажется, что он слишком сильно "защелкивается" на месте, и я (пока?) не понял, как это обойти, но завтра я попробую еще немного.

let element = $("#spinning");

// Simulate random interval for data being fetched from server
let randomIntervalSeconds = Math.random()*10;
console.info(randomIntervalSeconds);
// TODO: keep rotating the element for randomIntervalSeconds
// I used below code along with setInterval with 1001 ms interval



setTimeout(function(){
    // Simulate data arrived callback.
		element.removeClass("go");
    element.css({"transform": "rotateZ(" + (360+48) + "deg)", "transition-duration": 1.5 + "s"});

}, randomIntervalSeconds*1000)
#spinning {
	background-color: red;
	display: inline-block;
	margin: 50px;
}
.go {
	animation: spin 1s infinite linear;
}
@keyframes spin {
	from { transform: rotateZ(0deg) }
	to { transform: rotateZ(360deg) }
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id = "spinning" class = "go">
  abcdefghijkl
</div>

Я уже пробовал удалить классы анимации css. но этот переход слишком резкий и выглядит неестественно.

rahulserver 04.12.2018 09:03

Другие вопросы по теме