Carousel Rotate

by Posandu Mapa

HTML

<div class="main-container">
  <div class="container-flex" id="container-flex">
    <div class="item item-1">
      <h1>1</h1>
    </div>
    <div class="item item-2">
      <h1>2</h1>
    </div>
    <div class="item item-3">
      <h1>3</h1>
    </div>
  </div>
</div>

CSS

*,
::before,
::after {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

body {
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  height: 100vh;
  font-family: Arial, Helvetica, sans-serif;
  line-height: 1.5;
  background-color: #131b24;
}

.main-container {
  padding: 30px 0;
  height: 300px;
  width: 900px;
  border-top: 1px solid #444;
  border-bottom: 1px solid #444;
  overflow: hidden;
  background-color: white;
}

.container-flex {
  height: 100%;
  display: flex;
  transition: transform 400ms cubic-bezier(0.165, 0.84, 0.44, 1);
}

.item {
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  min-width: 300px;
  max-width: 300px;
}

.item h1 {
  font-size: 40px;
  color: white;
}

/* ITEMS */

.item-1 {
  background-color: #2c3e50;
  transform: translateX(100px);
  z-index: 1;
}

.item-2 {
  background-color: #3498db;
  z-index: 2;
}

.item-3 {
  background-color: #1abc9c;
  transform: translateX(-100px);
  z-index: 1;
}

JavaScript

const CONTAINER_FLEX = document.querySelector('.container-flex');
const items = document.querySelectorAll('.item');

let touchStartX = 0;
let touchMoveX = 0;
let count = 0;

let current_translate = 0;
let previous_translate = 0;

CONTAINER_FLEX.addEventListener('dragstart', (event) => {
  touchStartX = event.touches[0].pageX;
});

CONTAINER_FLEX.addEventListener('dragmove', (event) => {
  touchMoveX = event.touches[0].pageX;

  current_translate = previous_translate + (touchMoveX - touchStartX);

  console.log(current_translate);

  items[1].style.transform = `translateX(${current_translate}px)`;
});

CONTAINER_FLEX.addEventListener('touchend', () => {
  current_translate = touchMoveX - touchStartX;
  previous_translate = current_translate;
});