Я изучаю requestAnimationFrame и запускать функцию отрисовки у меня получается. Я не понимаю, как управлять тем, на какой стадии находится отрисованный элемент.
Я написал, что шарик идёт вниз на 100px за секунду. Но при достижении 100px при запуске следующей анимации, я хотел бы, чтобы запустилась другая анимация, при которой шарик шёл бы обратно.
Как в хорошем коде управляет анимацией в requestAnimationFrame?
var el = document.getElementById("first");
var elem = document.getElementById("second");
function animate({timing, draw, duration}) {
let start = performance.now();
requestAnimationFrame(function animate(time) {
let timeFraction = (time - start) / duration;
if (timeFraction > 1) {
timeFraction = 1;
}
let progress = timing(timeFraction);
draw(progress);
if (timeFraction < 1) {
requestAnimationFrame(animate);
}
});
}
window.addEventListener('click', () => {
animate({
duration: 1000,
timing: function(timeFraction) {
return timeFraction;
},
draw: function(progress) {
if (elem.style.top == (100 + 'px') || num == 1) {
var num = 1;
elem.style.top = progress * 0 + 'px';
} else {
elem.style.top = progress * 100 + 'px';
}
}
});
});
body {
margin: 0;
}
#first, #second {
width: 100px;
height: 100px;
position: relative;
border-radius: 50%;
background-color: red;
}
#second {
background-color: green;
}
<div id="first"></div>
<div id="second"></div>
Хорошая анимация - это чистая функция от времени, в каждом кадре Вы однозначно знаете сколько прошло времени и соответственно однозначно можете определить где должен находится объект...
animation.innerHTML = Array(30).fill(0).map((e, i) => {
return `<div style='background-color:hsl(${i*12},66%,66%)'></div>`;
}).join('');
let circles = document.querySelectorAll('#animation div');
requestAnimationFrame(draw)
function draw(t) {
requestAnimationFrame(draw)
circles.forEach((c,i) => {
c.style.top = 55 + 50*(Math.sin(t/300-i*100)) + "px";
c.style.transform = `scale(${0.7+Math.sin(t/300-i*33)*0.3})`;
c.style.left = i*21+5 + Math.cos(t/255-i)*5 + "px";
})
}
#animation div {
border-radius: 50%;
position: absolute;
width: 20px;
height: 20px;
top: 0;
}
<div id=animation><div>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я сделала мини тест на js, на язык не обращайте внимания, в value находятся баллы, если правильно угадал то добавляется 1 балл
Мне нужно сделать функцию, которая бы удаляла из верстки элементы корзиныДля этого пишу такой код:
На странице имеется iframe, находящийся в одной папке вместе с родителемВнутри iframe имеется поле для ввода