<div class="cont">
  <div class="slider"></div>
  <ul class="nav"></div>
  <div data-target='right' class="side-nav side-nav--right"></div>
  <div data-target='left' class="side-nav side-nav--left"></div>
</div>
$bgClr: rgba(#0b0f27, .83);
$txtClr: #fff;
$animSpd: 750 * 1ms; // Change also in JS

$numOfSlides: 5; // Add new city in the array in JS and a new image below

$bgPics: (
url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/537051/city--1-min-min.jpg') center center no-repeat,
url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/537051/city--2-min-min.jpg') center center no-repeat, url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/537051/city--3-min-min.jpg') center center no-repeat,
url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/537051/city--4-min-min.jpg') center center no-repeat,
url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/537051/city--5-min-min.jpg') center center no-repeat
);

@mixin mediaMaxW($width) {
  @media screen and (max-width: $width) {
    @content;
  }
}

.cont {
  position: relative;
  height: 100vh;
  overflow: hidden;
}

.slider {
  position: relative;
  height: 100%;
  transform: translate3d(0, 0, 0);
  will-change: transform;
  cursor: all-scroll;
  user-select: none;

  &.animation {
    transition: transform $animSpd ease-in-out;

    .slide__darkbg {
      transition: transform $animSpd ease-in-out;
    }
    
    .slide__text {
      transition: transform $animSpd ease-in-out;
    }
    
    .slide__letter {
      transition: transform $animSpd ease-in-out;
    }
  }
}

.slide {
  position: absolute;
  top: 0;
  width: 100%;
  height: 100%;
  overflow: hidden;
  
  @for $i from 1 through $numOfSlides {
    &--#{$i} {
      left: 100% * ($i - 1);
    }
  }
  
  &__darkbg {
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    transform: translate3d(0, 0, 0);
    will-change: transform;
    z-index: 10;
  }
  
  &__text-wrapper {
    position: absolute;
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100%;
    height: 100%;
    z-index: 15;
  }
  
  &__letter {
    position: absolute;
    display: flex;
    align-items: center;
    justify-content: center;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    transform: translate3d(0, 0, 0);
    -webkit-text-fill-color: transparent !important;
    -webkit-background-clip: text !important;
    font: {
      size: 50vw;;
      weight: 800;
    }
    color: #000;
    z-index: 2;
    will-change: transform;
    user-select: none;
  }
  
  &__text {
    font: {
      size: 8vw;
      weight: 800;
    }
    text-transform: uppercase;
    transform: translate3d(0, 0, 0);
    letter-spacing: 12px;
    color: $txtClr;
    will-change: transform;
    user-select: none;
  }
  &__text:nth-child(odd) {
    z-index: 2;
  }
  &__text:nth-child(even) {
    z-index: 1;
  }
    
  @each $item in $bgPics {
    $i: index($bgPics, $item);
    &--#{$i} {
      &__darkbg {
        left: -50% * ($i - 1);
        background: $item;
        background-size: cover;
        background-position: 0px center, 0px center;
        transform: translate3d(0, 0, 0);
        will-change: transform;
        &:after {
          content: '';
          position: absolute;
          top: 0;
          left: 0;
          width: 100%;
          height: 100%;
          background-color: $bgClr;
        }
      }
      &__letter {
        background: $item;
        background-position: 0px center, 0px center;
        background-size: cover;
      }
    }
  }
}

.nav {
  position: absolute;
  bottom: 25px;
  left: 50%;
  transform: translateX(-50%);
  list-style-type: none;
  z-index: 10;
  
  &__slide {
    position: relative;
    display: inline-block;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: 2px solid #fff;
    margin-left: 10px;
    cursor: pointer;
    @include mediaMaxW(400px) {
      width: 22px;
      height: 22px;
    }
    &:hover:after {
      transform: translate(-50%, -50%) scale(1,1);
      opacity: 1;
    }
    
    &:after {
      content: '';
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%) scale(0,0);
      width: 75%;
      height: 75%;
      border-radius: 50%;
      background-color: #fff;
      opacity: 0;
      transition: 300ms;
    }
    
    &--1 {
      margin-left: 0;
    }
  }
}

.nav-active {
  &:after {
    transform: translate(-50%, -50%) scale(1,1);
    opacity: 1;
  }
}

.side-nav {
  position: absolute;
  width: 10%;
  height: 100%;
  top: 0;
  z-index: 20;
  cursor: pointer;
  opacity: 0;
  transition: 300ms;
  
  &:hover {
    opacity: .1;
  }
  
  &--right {
    right: 0;
    background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgb(238, 215, 255) 100%);
  }
  &--left {
    left: 0;
    background-image: linear-gradient(to left, rgba(255, 255, 255, 0) 0%, rgb(238, 215, 255) 100%);
  }
}

html {
  box-sizing: border-box;
  font: {
    family: 'Open Sans', sans-serif;
  }
}

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

body {
  background-color: #000;
  overflow: hidden;
}
View Compiled
$(document).ready(function() {
  const $cont = $('.cont');
  const $slider = $('.slider');
  const $nav = $('.nav');
  const winW = $(window).width();
  const animSpd = 750; // Change also in CSS
  const distOfLetGo = winW * 0.2;
  let curSlide = 1;
  let animation = false;
  let autoScrollVar = true;
  let diff = 0;
  
  // Generating slides
  let arrCities = ['Amsterdam', 'Rome', 'New—York', 'Singapore', 'Prague']; // Change number of slides in CSS also
  let numOfCities = arrCities.length;
  let arrCitiesDivided = [];

  arrCities.map((city) => {
    let length = city.length;
    let letters = Math.floor(length / 4);
    let exp = new RegExp(".{1," + letters + "}", "g");
    
    arrCitiesDivided.push(city.match(exp));
  });
  
  let generateSlide = function(city) {
    let frag1 = $(document.createDocumentFragment());
    let frag2 = $(document.createDocumentFragment());
    const numSlide = arrCities.indexOf(arrCities[city]) + 1;
    const firstLetter = arrCitiesDivided[city][0].charAt(0);

    const $slide =
          $(`<div data-target="${numSlide}" class="slide slide--${numSlide}">
              <div class="slide__darkbg slide--${numSlide}__darkbg"></div>
              <div class="slide__text-wrapper slide--${numSlide}__text-wrapper"></div>
            </div>`);

    const letter = 
          $(`<div class="slide__letter slide--${numSlide}__letter">
              ${firstLetter}
            </div>`);

    for (let i = 0, length = arrCitiesDivided[city].length; i < length; i++) {
      const text = 
            $(`<div class="slide__text slide__text--${i + 1}">
                ${arrCitiesDivided[city][i]}
              </div>`);
      frag1.append(text);
    }

    const navSlide = $(`<li data-target="${numSlide}" class="nav__slide nav__slide--${numSlide}"></li>`);
    frag2.append(navSlide);
    $nav.append(frag2);

    $slide.find(`.slide--${numSlide}__text-wrapper`).append(letter).append(frag1);
    $slider.append($slide);

    if (arrCities[city].length <= 4) {
      $('.slide--'+ numSlide).find('.slide__text').css("font-size", "12vw");
    }
  };

  for (let i = 0, length = numOfCities; i < length; i++) {
    generateSlide(i);
  }

  $('.nav__slide--1').addClass('nav-active');

  // Navigation
  function bullets(dir) {
    $('.nav__slide--' + curSlide).removeClass('nav-active');
    $('.nav__slide--' + dir).addClass('nav-active');
  }
  
  function timeout() {
    animation = false;
  }
  
  function pagination(direction) {
    animation = true;
    diff = 0;
    $slider.addClass('animation');
    $slider.css({
      'transform': 'translate3d(-' + ((curSlide - direction) * 100) + '%, 0, 0)'
    });
    
    $slider.find('.slide__darkbg').css({
        'transform': 'translate3d(' + ((curSlide - direction) * 50) + '%, 0, 0)'
    });
    
    $slider.find('.slide__letter').css({
        'transform': 'translate3d(0, 0, 0)',
    });
    
    $slider.find('.slide__text').css({
      'transform': 'translate3d(0, 0, 0)'
    });
  }
  
  function navigateRight() {
    if (!autoScrollVar) return;
    if (curSlide >= numOfCities) return;
    pagination(0);
    setTimeout(timeout, animSpd);
    bullets(curSlide + 1);
    curSlide++;
  }
  
  function navigateLeft() {
    if (curSlide <= 1) return;
    pagination(2);
    setTimeout(timeout, animSpd);
    bullets(curSlide - 1);
    curSlide--;
  }

  function toDefault() {
    pagination(1);
    setTimeout(timeout, animSpd);
  }
  
  // Events
  $(document).on('mousedown touchstart', '.slide', function(e) {
    if (animation) return;
    let target = +$(this).attr('data-target');
    let startX = e.pageX || e.originalEvent.touches[0].pageX;
    $slider.removeClass('animation');
    
    $(document).on('mousemove touchmove', function(e) {
      let x = e.pageX || e.originalEvent.touches[0].pageX;
      diff = startX - x;
      if (target === 1 && diff < 0 || target === numOfCities && diff > 0) return;
      
      $slider.css({
        'transform': 'translate3d(-' + ((curSlide - 1) * 100 + (diff / 30)) + '%, 0, 0)'
      });
      
      $slider.find('.slide__darkbg').css({
        'transform': 'translate3d(' + ((curSlide - 1) * 50 + (diff / 60)) + '%, 0, 0)'
      });
      
      $slider.find('.slide__letter').css({
        'transform': 'translate3d(' +  (diff / 60) + 'vw, 0, 0)',
      });
      
      $slider.find('.slide__text').css({
        'transform': 'translate3d(' + (diff / 15) + 'px, 0, 0)'
      });
    })  
  })
  
  $(document).on('mouseup touchend', function(e) {
    $(document).off('mousemove touchmove');
    
    if (animation) return;
    
    if (diff >= distOfLetGo) {
      navigateRight();
    } else if (diff <= -distOfLetGo) {
      navigateLeft();
    } else {
      toDefault();
    }
  });
  
  $(document).on('click', '.nav__slide:not(.nav-active)', function() {
    let target = +$(this).attr('data-target');
    bullets(target);
    curSlide = target;
    pagination(1);
  }); 
  
  $(document).on('click', '.side-nav', function() {
    let target = $(this).attr('data-target');
    
    if (target === 'right') navigateRight();
    if (target === 'left') navigateLeft();
  });
  
  $(document).on('keydown', function(e) {
    if (e.which === 39) navigateRight();
    if (e.which === 37) navigateLeft();
  });
  
  $(document).on('mousewheel DOMMouseScroll', function(e) {
    if (animation) return;
    let delta = e.originalEvent.wheelDelta;
    
    if (delta > 0 || e.originalEvent.detail < 0) navigateLeft();
    if (delta < 0 || e.originalEvent.detail > 0) navigateRight();
  });
});
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js