Пин-шаги
продуктовые лендинги Подсветка манифеста →

Sticky-сцены

Пин-шаги

Экран пришпилен: скролл листает шаги слева и синхронно меняет картинку справа.

Скрольте медленно.

01

Заполните поля

Первый шаг — текст-заглушка. Активный шаг подсвечен, остальные пригашены.

02

Получите ссылку

Второй шаг — прогресс скролла листает шаги, картинка справа меняется синхронно.

03

Отправьте гостям

Третий шаг — секция отпускает страницу, когда история рассказана.

Код
<section class="pin-steps">  <!-- 320vh, --p пишет движок -->
  <div class="stick">
    <div class="left">
      <div class="step">01 — шаг</div>
      <div class="step">02 — шаг</div>
      <div class="step">03 — шаг</div>
    </div>
    <div class="right">
      <img class="shot" src="a.jpg"><img class="shot" src="b.jpg"><img class="shot" src="c.jpg">
    </div>
  </div>
</section>

<style>
.pin-steps { position: relative; height: 320vh; }
.pin-steps .stick { position: sticky; top: 0; height: 100vh;
  display: grid; grid-template-columns: 1fr 1fr; align-items: center; }
.step { opacity: calc(.25 + var(--on,0) * .75); transition: opacity .3s; }
.right { position: relative; }
.shot { position: absolute; inset: 0; opacity: 0; transition: opacity .4s; }
</style>

<script>
// прогресс секции 0..1 делится на диапазоны шагов
var scene = document.querySelector(".pin-steps");
var steps = scene.querySelectorAll(".step");
var shots = scene.querySelectorAll(".shot");
function loop() {
  var r = scene.getBoundingClientRect();
  var p = Math.min(Math.max(-r.top / (r.height - innerHeight), 0), 1);
  var idx = Math.min(Math.floor(p * steps.length), steps.length - 1);
  steps.forEach(function (st, i) { st.style.setProperty("--on", i === idx ? 1 : 0); });
  shots.forEach(function (sh, i) { sh.style.opacity = i === idx ? 1 : 0; });
  requestAnimationFrame(loop);
}
requestAnimationFrame(loop);
</script>
Промпт для ИИ
Сделай пришпиленные шаги (pin-steps): секция 320vh, sticky-экран с двумя колонками — слева список шагов, справа стопка изображений (absolute друг на друге). Прогресс прокрутки секции 0..1 делится на равные диапазоны по числу шагов: активный шаг получает полную непрозрачность (остальные 0.25) и его картинка проявляется (transition opacity 0.4s). Скроллом вперёд/назад шаги листаются в обе стороны. На мобильном — обычная колонка без пина.