Задать вопрос

Правильно ли использован requestAnimationFrame?

Задавал вопрос:
Как сделать правильно анимацию, в э том примере?

Благодаря помощи: Евгений Евгений, нашел решение:
https://jsfiddle.net/w0h4xsp6/14/

Так как информация: requestAnimationFrame
а так же, learnJS - requestAnimationFrame достаточно мало,
хотел бы поинтересоваться у более опытных коллег в этом вопросе: насколько код написан верно?
Потому как настораживает, потенциально очень большая вложенность, если элемент, надо будет двигать еще куда-то
  • Вопрос задан
  • 200 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Немного костыльно тут полагаться на requestAnimationFrame для разрыва двух анимаций.

Может, лучше сделать всё на CSS-анимациях?

Ответ написан
Seasle
@Seasle Куратор тега JavaScript

Буквой «Г»



Функции плавности можно посмотреть тут.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexandrVV86
@AlexandrVV86 Автор вопроса
Хотелось бы подытожить:
Была проблема с кодом:
//где-то выше
el.style.transform = 'translateX(-100%)';
//где-то ниже
el.style.transform = '';
el.style.transition = '10s';
el.style.transform = 'translateY(100%)';

Проблема заключалось в том, что transition применялось, еще до (может во время сброса первой трансформации). Поэтому блок двигался не буквой "Г", а по диагонали.

Евгений скинул видео: Джейк Арчибальд в котором, демонстрируется, решение данной проблемы. Пока я дошел до нужной секунды, читая титры и вникая, я уже сам нашел придумал решение - и оно заработало, но не был уверен в его правильности, так возник этот вопрос. В это время предложил еще варианты решений Сергей Соколов.

И так публикую 4 решения:
1, 2 Джейк Арчибальд:
1. requestAnimationFrame
requestAnimationFrame(()=>{
		requestAnimationFrame(()=>{
			el.style.transition = '10s';
  		el.style.transform = 'translateY(100%)';
  })
})

2. Просим браузер посчитать стили для элемента:
el.style.transform = '';
getComputedStyle(el).transform;
el.style.transition = '10s';
el.style.transform = 'translateY(100%)';


3, 4 Сергей Соколов
3. тоже что 2
el.style.transform = '';
void el.offsetWidth;
el.style.transition = '10s';
el.style.transform = 'translateY(100%)';

4. Добавление css анимации:
.animate-go1 {
  animation-duration: 4s;
  animation-name: go1;
}

@keyframes go1 {
  from {
    transform: translateX(-100%);
  }

  0.5% {
    transform: translateX(0%);
  }

  to {
    transform: translateY(100%);
  }
}


const className = 'animate-go1';
  el.classList.remove(className);
  el.classList.add(className);


5. Вариант самый короткий, автор Александр:
el.style.transform = 'translate(-100%, 0)';

c.onclick = function() {
    el.style.transition = '10s';
    el.style.transform = 'translate(0, 100%)';
}

Всех благодарю за участие
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽