<div class="slider">
  <div class="pagination">
    <div class="pagination__track">
    </div>
  </div>

  <div class="slides">
    <div class="slide">
      <div class="slide__pagination-label">today</div>
      <div class="slide__content">
        <div class="slide__title">today</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit</div>
      </div>
    </div>
    
    <div class="slide">
      <div class="slide__pagination-label">2001</div>
      <div class="slide__content">
        <div class="slide__title">2001</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit nihil suscipit reprehenderit eveniet, animi sunt ut maiores eos aliquid repudiandae tempore eum, quaerat perferendis iste.</div>
      </div>
    </div>
    
    <div class="slide">
      <div class="slide__pagination-label">2002</div>
      <div class="slide__content">
        <div class="slide__title">2002</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit nihil suscipit reprehenderit eveniet, animi sunt ut maiores eos aliquid repudiandae tempore eum, quaerat perferendis iste.</div>
      </div>
    </div>
    
    <div class="slide">
      <div class="slide__pagination-label">2003</div>
      <div class="slide__content">
        <div class="slide__title">2003</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit nihil suscipit reprehenderit eveniet, animi sunt ut maiores eos aliquid repudiandae tempore eum, quaerat perferendis iste.</div>
      </div>
    </div>
    
    <div class="slide">
      <div class="slide__pagination-label">2004</div>
      <div class="slide__content">
        <div class="slide__title">2004</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit nihil suscipit reprehenderit eveniet, animi sunt ut maiores eos aliquid repudiandae tempore eum, quaerat perferendis iste.</div>
      </div>
    </div>
    
    <div class="slide">
      <div class="slide__pagination-label">2005</div>
      <div class="slide__content">
        <div class="slide__title">2005</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit nihil suscipit reprehenderit eveniet, animi sunt ut maiores eos aliquid repudiandae tempore eum, quaerat perferendis iste.</div>
      </div>
    </div>
    
    <div class="slide">
      <div class="slide__pagination-label">2006</div>
      <div class="slide__content">
        <div class="slide__title">2006</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit nihil suscipit reprehenderit eveniet, animi sunt ut maiores eos aliquid repudiandae tempore eum, quaerat perferendis iste.</div>
      </div>
    </div>
    
    <div class="slide">
      <div class="slide__pagination-label">2007</div>
      <div class="slide__content">
        <div class="slide__title">2007</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit nihil suscipit reprehenderit eveniet, animi sunt ut maiores eos aliquid repudiandae tempore eum, quaerat perferendis iste.</div>
      </div>
    </div>
    
    <div class="slide">
      <div class="slide__pagination-label">2008</div>
      <div class="slide__content">
        <div class="slide__title">2008</div>
        <div class="slide__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam officiis consequuntur omnis, quae impedit nihil suscipit reprehenderit eveniet, animi sunt ut maiores eos aliquid repudiandae tempore eum, quaerat perferendis iste.</div>
      </div>
    </div>
    
  </div>
</div>

<div class="buttons">
  <button id="prev">prev</button>
  <button id="next">next</button>
</div>

// fonts
// Open Sans and Poppins
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&family=Poppins:wght@300;700&display=swap');

body {
  margin: 0;
  padding: 0;
  color: #fdfcdc;
  background: #000;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  font-family: 'Open Sans', sans-serif;
}

.slider {
  display: flex;
}

.pagination {
  position: relative;
  width: 30%;
  margin-right: 15px;
}

.pagination__track {
  display: flex;
  align-items: center;
  position: absolute;
  left: 0;
  top: 50%;
  width: 100%;
  height: 0;
  transform-origin: 0 50%;
}

.pagination__track--transition {
  transition: transform 500ms;
}

.pagination__item {
  position: absolute;
  left: 0;
  width: 100%;
  text-align: right;
  transform-origin: 0 50%;
  transform: rotate(0deg);
  font: 18px 'Poppins', sans-serif;
  line-height: 1.5;
  user-select: none;
  cursor: pointer;
}

.pagination__item::before {
  content: '';
  position: absolute;
  left: 0;
  top: calc(50% - 1px);
  width: 100%;
  height: 2px;
  background: linear-gradient(to right, #fdfcdc, transparent);
}

.slides {
  width: 70%;
  display: flex;
}

.slide {
  position: relative;
  flex: 0 0 100%;
  overflow: hidden;
  opacity: 0;
  transform: translateY(100%);
  
  &--active {
    opacity: 1;
    transform: translateY(0);
  }
  
  &--next {
    opacity: 0;
    transform: translateY(-100%);
  }
  
  &--transition {
    transition: transform 500ms, opacity 500ms linear;
  }
  
  &__title {
    font: 300 142px 'Poppins', sans-serif;
    letter-spacing: 0.3rem;
    line-height: 1;
    margin: 30px 0;
    background-image: linear-gradient(45deg, #f09433 0%,#e6683c 25%,#dc2743 50%,#cc2366 75%,#bc1888 100%);
    -webkit-background-clip: text;
    color: transparent;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }
}

.slide__pagination-label {
  display: none;
}

.buttons {
  position: fixed;
  top: 10px;
  left: 10px;
}
View Compiled
const sliderEl = document.querySelector('.slider');
const slideEls = sliderEl.querySelectorAll('.slide');
const paginationTrackEl = sliderEl.querySelector('.pagination__track');
const rotateStep = 10;

let currentSlideIdx = 3;

function initSlider() {
  const pagLabelsEls = sliderEl.querySelectorAll('.slide__pagination-label');
  for (let i = 0; i < pagLabelsEls.length; i++) {
    const lab = pagLabelsEls[i];
    const clone = lab.cloneNode(true);
    clone.classList.remove('slide__pagination-label');
    clone.classList.add('pagination__item');
    clone.dataset.index = i;
    clone.style.transform = `rotate(${i * rotateStep}deg)`;
    paginationTrackEl.appendChild(clone);
  }
  
  for (let i = 0; i < slideEls.length; i++) {
    const slide = slideEls[i];
    slide.style.left = `${i * -100}%`;
  }
  
  slideEls[currentSlideIdx].classList.add('slide--active');
  paginationTrackEl.style.transform = `rotate(${currentSlideIdx * -rotateStep}deg)`;
  onNextFrame(() => paginationTrackEl.classList.add('pagination__track--transition'));
}

initSlider();

function slideTo(index) {
  const totalSlides = slideEls.length;
  const nextIndex = ((index % totalSlides) + totalSlides) % totalSlides;

  if (nextIndex === currentSlideIdx) return;

  const current = slideEls[currentSlideIdx];
  const next = slideEls[nextIndex];
  
  current.classList.replace('slide--active', 'slide--next');
  current.classList.add('slide--transition');

  current.addEventListener('transitionend', () => {
    current.classList.remove('slide--next');
    current.classList.remove('slide--transition');
  }, { once: true });

  next.classList.add('slide--active', 'slide--transition');

  paginationTrackEl.style.transform = `rotate(${nextIndex * -rotateStep}deg)`;
  
  currentSlideIdx = nextIndex;
}

const next = document.getElementById('next');
const prev = document.getElementById('prev');
next.addEventListener('click', () => {
  slideTo(currentSlideIdx + 1);
});

prev.addEventListener('click', () => {
  slideTo(currentSlideIdx - 1);
});

sliderEl.addEventListener('click', ({ target }) => {
  const pagItemEl = target.closest('.pagination__item');
  if (!pagItemEl) return;
  
  const idx = Number(pagItemEl.dataset.index);
  slideTo(idx);
});

// utils

function onNextFrame(cb) {
  requestAnimationFrame(() => requestAnimationFrame(cb));
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.