Карусель-слайдер
jobyaviation.com Логостена с перемешиванием →

Микровзаимодействия

Карусель-слайдер

Scroll-snap карусель с перетаскиванием мышью — как лента ExperienceHighlights у Joby. Ноль библиотек.

Тяните карточки мышью.

Тяните мышью или крутите: карточки прилипают к центру через scroll-snap, инерция — нативная. Ноль библиотек.

Код
<div class="carousel">
  <div class="item"><img src="a.jpg"></div>
  <div class="item"><img src="b.jpg"></div>
  <div class="item"><img src="c.jpg"></div>
</div>

<style>
.carousel { display: flex; gap: 16px; overflow-x: auto;
  scroll-snap-type: x mandatory; padding: 10px 8vw;
  cursor: grab; scrollbar-width: none; }
.carousel::-webkit-scrollbar { display: none; }
.carousel .item { flex: 0 0 min(440px, 78%);
  scroll-snap-align: center; border-radius: 20px; overflow: hidden; }
.carousel.dragging { cursor: grabbing; scroll-snap-type: none; }
</style>

<script>
var car = document.querySelector(".carousel");
var down = false, sx = 0, sl = 0;
car.addEventListener("pointerdown", function (e) {
  down = true; sx = e.clientX; sl = car.scrollLeft;
  car.classList.add("dragging"); car.setPointerCapture(e.pointerId);
});
car.addEventListener("pointermove", function (e) {
  if (down) car.scrollLeft = sl - (e.clientX - sx);
});
["pointerup", "pointercancel"].forEach(function (ev) {
  car.addEventListener(ev, function () {
    down = false; car.classList.remove("dragging");
  });
});
</script>
Промпт для ИИ
Сделай карусель как ExperienceHighlights на jobyaviation.com: flex-контейнер с overflow-x:auto и scroll-snap-type:x mandatory; карточки flex:0 0 min(440px,78%) со scroll-snap-align:center; скроллбар спрятан. Перетаскивание мышью: на pointerdown запоминаем scrollLeft и clientX, на pointermove тянем scrollLeft, на время драга класс dragging (cursor:grabbing и scroll-snap-type:none, чтобы снап не мешал). Если на сайте есть Lenis — контейнеру data-lenis-prevent.