Ширина блоков в слайдере при прокрутке (JS, Jquery)

Начал писать слайдер, который должен содержать 4 блока одинаковой ширины. Посмотрел видео на ютубе, с горем пополам написал скрипт на Jquery. Проблема в том, что между блоками в слайдере должен быть отступ (margin-left), при добавлении отступа между блоками - последний блок теряет ширину на заданный отступ. Может кто нибудь помочь со скриптом?

   '  https://codepen.io/Vladislav_Biryukov/pen/NWdpevN '

Ответы (1 шт):

Автор решения: Sevastopol'

Для того, чтобы у вас правильно работало свойство transform: translateX при пролистывании слайдов, необходимо в скрипт внести небольшое дополнение:

minWidth: itemWidth - 35, //отнимаем отступ

$(document).ready(function() {
  let position = 0;
  const slidesToShow = 3;
  const slidesToScroll = 1;
  const container = $('.slider-container');
  const track = $('.slider-track');
  const item = $('.slider-item');
  const btnPrev = $('.btn-prev');
  const btnNext = $('.btn-next');
  const itemsCount = item.length;
  const itemWidth = container.width() / slidesToShow;
  const movePosition = slidesToScroll * itemWidth;

  item.each(function(index, item) {
    $(item).css({
      minWidth: itemWidth - 35,
    });
  });

  btnNext.click(function() {
    const itemsLeft = itemsCount - (Math.abs(position) + slidesToShow * itemWidth) / itemWidth;
    position -= itemsLeft >= slidesToScroll ? movePosition : itemsLeft * itemWidth;

    setPosition();
    checkBtns();
  });

  btnPrev.click(function() {
    const itemsLeft = Math.abs(position) / itemWidth;
    position += itemsLeft >= slidesToScroll ? movePosition : itemsLeft * itemWidth;

    setPosition();
    checkBtns();
  });

  const setPosition = () => {
    track.css({
      transform: `translateX(${position}px)`
    });
  };

  const checkBtns = () => {
    btnPrev.prop('disabled', position === 0);
    btnNext.prop(
      'disabled',
      position <= -(itemsCount - slidesToShow) * itemWidth
    );
  };

  checkBtns();
});
* {margin:0; padding:0; box-sizing: border-box;}

.slider-container {
  overflow: hidden;
  position: relative;
}

.slider-track {
  display: flex;
  transition: .2s;
}

.slider-item {
  height: 145px;
  margin-left: 35px; /*отступ*/
}

.slider-item:nth-child(1) {
  background-color: red;
}

.slider-item:nth-child(2) {
  background-color: yellow;
}

.slider-item:nth-child(3) {
  background-color: blue;
}

.slider-item:nth-child(4) {
  background-color: pink;
}

.slider-item:nth-child(5) {
  background-color: green;
}

.slider-item:nth-child(6) {
  background-color: gold;
}

.slider-item:nth-child(7) {
  background-color: chocolate;
}

.slider-item:nth-child(8) {
  background-color: yellowgreen;
}

.slider-item:nth-child(9) {
  background-color: aqua;
}

.slider-item:nth-child(10) {
  background-color: bisque;
}

.slider-item:nth-child(11) {
  background-color: chartreuse;
}

.slider-item:nth-child(12) {
  background-color: fuchsia;
}

.slider-item:nth-child(13) {
  background-color: gray;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<section>
  <div class="container">
    <div class="slider-container">
      <div class="slider-track">

        <div class="slider-item">1</div>
        <div class="slider-item">2</div>
        <div class="slider-item">3</div>
        <div class="slider-item">4</div>
        <div class="slider-item">5</div>
        <div class="slider-item">6</div>
        <div class="slider-item">7</div>
        <div class="slider-item">8</div>
        <div class="slider-item">9</div>
        <div class="slider-item">10</div>
        <div class="slider-item">11</div>
        <div class="slider-item">12</div>
        <div class="slider-item">13</div>

      </div>
    </div>
  </div>
  <br>
  <button class="btn-prev">Prev</button>
  <button class="btn-next">Next</button>
</section>

→ Ссылка