JSFiddle - React, Tailwind, and code Playground

by indigorf

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
  .feedwrap {
    position: relative;
    height: 850px;
    width: 400px;
    overflow: hidden;
  }

  .feedwrap__container {
    position: absolute;
    top: 0;
    height: 100%;
    overflow-y: hidden;
  }

  .feedwrap .feedback__item {
    margin-bottom: 48px;
  }
</style>

<div class="feedwrap__ctrls">
  <a href="#" class="feedwrap__prev">НАЗАД</a>
  <a href="#" class="feedwrap__next">ВПЕРЕД</a>
</div>
<div class="feedwrap">
  <div class="feedwrap__container">
    <div class="feedback__item slide" data-count="1">
      <div class="feedback__item-header">
        <div>
          <div class="feedback__item-name">Сергей Игнатьев 33</div>
        </div>
        <div class="feedback__item-rating">
          <img src="http://test.insite.vip/assets/templates/villplast/img/star.svg" class="feedback__item-rating-star" alt="">
          <img src="http://test.insite.vip/assets/templates/villplast/img/star.svg" class="feedback__item-rating-star" alt="">
          <img src="http://test.insite.vip/assets/templates/villplast/img/star.svg" class="feedback__item-rating-star" alt="">
          <img src="http://test.insite.vip/assets/templates/villplast/img/star.svg" class="feedback__item-rating-star" alt="">
          <img src="http://test.insite.vip/assets/templates/villplast/img/star.svg" class="feedback__item-rating-star" alt="">
        </div>
      </div>
      <div class="feedback__item-text">Долго выбирали подоконник, рассматривали несколько компаний, мониторили цены, которые прямо скажем расстраивали. Приехали в ВИЛ ПЛАСТ за откосами, увидели их новые подоконники и ахнули, "глаза разбежались"…. Цена и качество, всё совпало. Купили подоконник ТМ VILPLAST, цвет Золотой дуб, очень довольны! Спасибо, будем рекомендовать!</div>
    </div>
    <div class="feedback__item slide" data-count="2">
      <div class="feedback__item-header">
        <div>
          <div...

CSS

.feedback__item {
  padding: 33px 29px;
  background: #FFFFFF;
  border-radius: 24px;
  box-shadow: 0px 10px 80px rgba(93, 58, 76, 0.1);
}

@media (min-width: 1140px) {
  .feedback__item {
    padding: 56px 64px;
  }
}

.feedback__item-header {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  margin-bottom: 24px;
  padding-bottom: 24px;
  border-bottom: 1px solid #E85939;
}

.swiper-slide-prev .feedback__item-header {
  border: none;
}

.feedback__item-name {
  font-family: Montserrat;
  margin-bottom: 4px;
  font-weight: bold;
  font-size: 18px;
  line-height: 22px;
  color: #E85939;
}

.feedback__item-company-name {
  font-family: Montserrat;
  margin-bottom: 10px;
  font-size: 14px;
  line-height: 17px;
  color: #242424;
}

.feedback__item-rating {
  display: flex;
}

.feedback__item-rating-star {
  width: 24px !important;
  margin-right: 8px;
  flex: none;
}

.feedback__item-text {
  font-family: Montserrat;
  font-size: 14px;
  line-height: 20px;
  color: #242424;
}

@media (min-width: 992px) {
  .feedback__item-text {
    font-size: 18px;
    line-height: 26px;
  }
}

JavaScript

$(function() {
$(window).on("load", function() {
  var container = $('.feedwrap__container'),
    slides = $('.feedwrap__container .slide'),
    count = slides.length,
    max = 9,
    wrapHeight = $('.feedwrap').height(),
    activeSlideHeight = $('.feedwrap__container > .slide:first-child').outerHeight();

  $('.feedwrap__container > .slide:first-child').addClass("slide_active");
  $('.feedwrap__container > .slide:eq(1)').addClass("slide_next");
  $('.feedwrap__container > .slide:last-child').clone().addClass("slide_prev slide_cloned").prependTo(container);
  $('.feedwrap__container > .slide:last-child').remove();

  var shift = (wrapHeight - activeSlideHeight) / 4;

  container.stop().animate({
    scrollTop: shift
  });
})

var container = $('.feedwrap__container'),
  slides = $('.feedwrap__container .slide'),
  count = slides.length,
  max = 10,
  wrapHeight = $('.feedwrap').height();

function nextSlide() {
  $(".slide_active").removeClass("slide_active").next().addClass("slide_active");
  var activeSlideHeight = $('.feedwrap__container > .slide.slide_active').outerHeight(),
    nextSlideHeight = $('.feedwrap__container > .slide.slide_next').outerHeight(),
    shift = (wrapHeight - activeSlideHeight) / 4;

  $('.feedwrap__container > .slide:first-child').clone().addClass("slide_cloned").appendTo(container);
  $('.feedwrap__container > .slide:first-child').remove();
  var dd = $('.feedwrap__container > .slide:last-child').outerHeight(true);
  //container.stop().animate({scrollTop: dd/2});
  //container.css({"transform" : 'translate3d(0px,-' + shift + 'px, 0px)', "transition-duration" : "300ms"}); // здесь цифра должна все время меняться, иначе анимации не будет, при фикс свиге на одно и то же расстояние
  var posActive = $(".slide_active").position(),
    spaceActive = (wrapHeight - activeSlideHeight) / 2,
    spaceNext = (wrapHeight - nextSlideHeight) / 2;
  //shift = activeSlideHeight + Math.abs(spaceActive - spaceNext);

  console.log(spaceActive + ' ' +...