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 + ' ' +...