В настоящее время я пытаюсь понять, как плавно повернуть изображение в HTML.
Изображение есть. Если кнопка нажата, изображение запускает анимацию легкого поворота. На максимальной скорости он просто продолжает вращаться, пока не будет нажата кнопка остановки.
После этого анимация медленно останавливается, в результате чего изображение остается под определенным углом. Поскольку (из того, что я знаю и пытался), невозможно сделать такую анимацию с помощью CSS, я использовал интервал в JS, который обновляется каждые 16 миллисекунд. Вот фрагмент:
var counter = 0;
var rotation = 0;
var speedVal = 0.01;
var speedFactor = 3;
var spinInterval = setInterval(function () {
rotation += counter * speedFactor;
rotation = rotation % 360;
if (counter != 0) $("#pumpIcon").css('transform', 'rotate(' + rotation + 'deg)');//set the image to a certain angle
if (counter < pump.spinning) {
counter += speedVal;
}
else if (counter >pump.spinning) {
counter -= speedVal;
}
if (counter * 100 < 1) counter = 0;//This way, the animation will fully stop/not accelerate when it reached a certain value
}
}, 16);
Существует цикл for, потому что вращаются два отдельных изображения, поэтому просто игнорируйте этот факт.
Проблема заключается в использовании такого решения в браузере Edge: кажется, что изображение дрожит, и я предполагаю, что это так, потому что JS не предназначен для частого обновления пользовательского интерфейса. Кажется, даже на некоторых, не очень быстрых устройствах он работает не так гладко (имеется в виду, что если в фоновом режиме выполняется много сценариев, то есть каждые 6 секунд, анимация приостанавливается на несколько миллисекунд, что приводит к заиканию).
Есть ли способ решить эту проблему? Что-то вроде «UI-Thread-like» в JS или, что еще лучше, способ решить эту проблему в CSS? Я действительно понятия не имею, как с этим бороться, потому что простая CSS-анимация не сработает.