@vahromeevilya-widestudio

Как создать анимированную интерактивную схему?

Есть вот такой сайт https://hlebozavod9.ru/

На нем есть вот такая схема
https://disk.yandex.ru/i/GP12c0mWKc9yUg

Она реализована таким образом:
1. Есть общая статичная картинка со зданиями и прочим
2. Есть SVG в котором прорисованы "белые" состояния зданий. Который отображаются при наведении
3. И есть картинка с анимацией где бегают человечки и так далее. В этой картинке быстро меняется src атрибут от 1 до 50 примерно. В итоге создается эффект анимации.

Вопрос: Можно ли сделать примерно тот же функционал, но по другому. Более оптимизированно и удобно, чем просто менять src у картинок.

Думали в сторонуу lottie , но дизайнеры говорят что у них 3d объекты и lottie для этого не очень подходит.

Самое главное чтобы можно было интерактивно взаимодействовать. Желательно чтобы была возможность ускорять/замедлять / останавливать / запускать анимацию в любой момент.
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
@sewaca
Как сейчас реализована анимация:
У вас есть 50 срендереных картинок анимации вроде этой и каждые n милисекунд меняется номер картинки
13.webp
В таком виде реализации вы ограничены по плавности анимации именно количеством таких кадров и в целом больше ничем

Как можно сделать лучше:
Вариант 1.
Анимация станет плавнее, если просто будете вопроизводить ее в 60 fps.
То есть просто поменяете код для смены аттрибута src на что-то такое:
let i = 0;
let a = setInterval(()=>{
    document.querySelector("body > div.page > div.places > div > div > div > div.places-map-wrap > div > div > img").src= "/assets/images/home_sequence/" + i + ".webp";
    i = (i + 1) % 49;
}, 1000/60) // 1000 / 60 означает что вы хотите вопроизводить 60 кадров в секунду

Минусы: из-зи увеличения fps таким способом увеличится и скорости анимации

Вариант 2.
Cделать не 50 типовых картинок, а 100 и менять их способом из варианта 1 c фпс в два раза выше чем сейчас
Тогда удастся сохранить и скорость анимации и сделать плавнее
Минусы: много работы (придется переделывать раскадровку всей анимации) + упадет скорость сайта из-за того что придется загружать в два раза больше картинок

Вариант 3.
ВОЗМОЖНО самый удачный, но ТОЧНО самый сложный и требующий много сил. Используйте вместо картинок вида
13.webp
canvas и библиотеку three.js (тут уже как-то самому придется разбираться, советов дать не могу, потому что сам недостаточно работал с этой библиотекой
Минусы: вполне вероятно, что из-за того что на сайт добавится +1 библиотека, а также 3д модельки скорость сайта будет не сильно отличаться от второго варианта.
Плюс по сравнению с вариантом № 2: Вы получите полную свободу в управлении этой анимацией. Сможете когда надо замедлить, когда надо ускорить без лишней работы
В целом скорость сайта не должна стать большой проблемой, потому что это не первый экран и даже не самое важное в карте. Соответственно можно что-то подгрузить попозже, что-то пораньше, что-то вообще не подгружать если слабый инет
Иными словами, загружать эту анимацию только после того как загрузили все остальное

В общем я постарался понятно расписать минусы и плюсы. Плюс многое зависит от того, как сделана эта штука у ваших дизайнеров
Если что-то непонятно объяснил - спрашивайте
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы