Как сделать такую анимацию (по скроллу)?

118
28 июня 2021, 07:10

В этой странице в самом низу есть анимация вокруг оси изображения (сделайте скролл в низ и увидите). Подскажите пожалуйста, как такую анимацию сделать?

Суть анимации: надпись вращается вокруг оси изображения и изображения увеличивается на весь экран (после окончания анимации) и анимация приходит (привязана к скроллу) при скролле.

Ссылка на видео.

Answer 1

let value = 0, v = 0;
let transform = (e,r,s) => e.setAttribute('transform',`scale(${s})rotate(${r})`);
requestAnimationFrame(draw);
function draw(t) {
  let speed = Math.max(0.0001, Math.abs(value-v)*0.1);
  if (v < value) v = Math.min(value, v+speed);
  if (v > value) v = Math.max(value, v-speed);
  transform(path, v*360, 1);
  transform(text, 0, 1+v*2);
  transform(img, v*90-45, 0.9+v*2);
  requestAnimationFrame(draw);
}
document.querySelector('svg').addEventListener('wheel', e => {
  value = Math.min(1, Math.max(value + Math.sign(-e.wheelDelta)*0.02, -0.3));
  e.preventDefault()
});
body {
  margin: 0;
  overflow: hidden;
}
<svg viewbox="-200 -200 400 400" height="100vh" width=100vw>
  <defs>
    <clipPath id=clip>
      <path id=path d="M-100,0a100,100,0,1,1,0,0.1z" fill=none></path>
    </clipPath>
  </defs>
  <text id=text>
    <textPath href="#path">
     Lorem ipsum dolor sit amet, consectetur adipiscing elit, 
     sed do eiusmod tempor incididunt ut. → 
    </textPath>
  </text>
  <image id=img xlink:href="https://picsum.photos/id/41/400/400" 
         clip-path="url(#clip)" x=-100 y=-100 width=200 height=200></image>
</svg>

READ ALSO
Загрузка данных из файла или БД на карту библиотеки amMaps(am4arts)

Загрузка данных из файла или БД на карту библиотеки amMaps(am4arts)

Столкнулся с проблемой загрузки данных из внешнего источника, на какой-либо объект, на картах в библиотеке ma4arts(amMap)

121
Реализация setTimeout для удаления нотифов

Реализация setTimeout для удаления нотифов

Пытаюсь сделать простые нотифыЖмем на кнопку, появляется уведомление

131
Не срабатывает нажатие радио кнопок

Не срабатывает нажатие радио кнопок

Не срабатывает скрыть / показать текст при выборе кнопок

103
Вызов пайтоновских скриптов из кода с++

Вызов пайтоновских скриптов из кода с++

Прочитал статью на хабре об использовании Python в многопоточном приложении с++ с использованием субинтерпретаторовПри этом, как заявляется...

130