Make the following slider move one box at the time

Viewed 27

I have the following slider, that goes repeatedly, but moves the amount of elements it has on the screen, so if there are 3 boxes, it jumps 3 at a time. I want it to move one by one. I ve tried but every time it screw the amount it moves to the left and it ends up with having half a box on the screen.

$( document ).ready(function() {

  let bxsliderElems = $('.elements');
  let listBox = $('.bxslider');
  let bxsliderElemsLength = bxsliderElems.length;

  let elemsPerSlide = 3; //DEFAULT VALUE
  

  $( "#num-slides" ).change(function(){
    elemsPerSlide = $( "#num-slides" ).val();
    blueSlider();
  });

  $('.slider-controls').css('display', 'flex');

  let prevArrow = $('.slider-controls .slide-prev');
  let nextArrow = $('.slider-controls .slide-next');

  let elemWidth;
  let maxMargin;
  let firstSeven;
  let lastSeven;
  let marginLeft;
  let count;
  let numSlides;

  let isComplete = true;

  blueSlider();

  function blueSlider() {

    $( 'li.elements' ).remove('.cloneBefore').removeClass('cloneBefore');
    $( 'li.elements' ).remove('.cloneAfter').removeClass('cloneAfter');
    
    elemWidth = 100 / elemsPerSlide;
    maxMargin = 100;
    marginLeft = -maxMargin;

    bxsliderElems = $('.elements');
    bxsliderElemsLength = bxsliderElems.length;

    cloneBefore = bxsliderElems.slice(bxsliderElemsLength - elemsPerSlide,bxsliderElemsLength);
    cloneAfter = bxsliderElems.slice(0,elemsPerSlide);
    cloneBefore.clone().addClass('cloneBefore').prependTo(listBox);
    cloneAfter.clone().addClass('cloneAfter').appendTo(listBox);

    bxsliderElems = $('.elements');
    bxsliderElemsLength = bxsliderElems.length;
    bxsliderElems.css('width', elemWidth + '%');
    listBox.css('width', (elemWidth*bxsliderElemsLength) + '%');
    listBox.css('marginLeft', -maxMargin + '%');

    count = 1;
    numSlides = Math.floor( (bxsliderElemsLength - elemsPerSlide*2) / elemsPerSlide );

  }

  nextArrow.click(function(){

    if ( isComplete ) {

      console.log('preue');

      isComplete = false;

      if (bxsliderElemsLength % elemsPerSlide != 0) {

        if ( marginLeft <= 0 && marginLeft > -(elemWidth * (bxsliderElemsLength - elemsPerSlide*2)) ) {
          marginLeft = marginLeft - maxMargin;

          console.log('1');
        }

        if ( marginLeft == -(elemWidth * (bxsliderElemsLength - elemsPerSlide*2)) ) {
          listBox.css('marginLeft', 0 + '%' );
          marginLeft = -maxMargin;

          console.log('2');
        }

        if (marginLeft < -(elemWidth * (bxsliderElemsLength - elemsPerSlide*2)) ) {
          marginLeft = -(elemWidth * (bxsliderElemsLength - elemsPerSlide*2));

          console.log('3');
        }

      } else {

        if ( marginLeft == -maxMargin*numSlides && count == numSlides ) {

          listBox.css('marginLeft', 0 + '%' );
          marginLeft = -maxMargin;
          count = 1;

          console.log('4');

        } else {

          marginLeft = marginLeft -maxMargin;
          count++;

          console.log('5');

        }

      }

      listBox.animate({
        marginLeft: marginLeft + '%'
      }, 1000, function() {
        isComplete = true;
      });

    }

  });

  prevArrow.click(function(){

    if ( isComplete ) {

      isComplete = false;

      if (bxsliderElemsLength % elemsPerSlide != 0) {

        if (marginLeft < 0 && marginLeft != -maxMargin) {
          marginLeft = marginLeft + maxMargin;
        }

        if (marginLeft == -maxMargin) {
          listBox.css('marginLeft', -(elemWidth* (bxsliderElemsLength - elemsPerSlide)) + '%' );
          marginLeft = -(elemWidth * (bxsliderElemsLength - elemsPerSlide*2));
        }

        if (marginLeft >= -maxMargin) {
          marginLeft = -maxMargin;
        }

      } else {

        if ( marginLeft == -maxMargin && count == 1 ) {

          listBox.css('marginLeft', -(elemWidth* (bxsliderElemsLength - elemsPerSlide)) + '%' );
          marginLeft = -(elemWidth * (bxsliderElemsLength - elemsPerSlide*2));

          count = count*numSlides;

        } else {

          marginLeft = marginLeft + maxMargin;
          count--;

        }

      }

      listBox.animate({
        marginLeft: marginLeft + '%'
      }, 1000, function() {
        isComplete = true;
      });

    }

  });

});
@font-face {
  font-family: Biciclette_Light;
  src: url('../fonts/Bicyclette-Light.woff') format('truetype');
  font-weight: lighter;
}
@font-face {
  font-family: Biciclette_Normal;
  src: url('../fonts/Bicyclette-Regular.woff') format('truetype');
  font-weight: normal;
}
@font-face {
  font-family: Biciclette_Bold;
  src: url('../fonts/Bicyclette-Bold.woff') format('truetype');
  font-weight: bolder;
}

* {
  padding: 0;
  margin: 0;
  list-style: none;
  box-sizing: border-box;
}

.banner-slider {
  overflow: hidden;
  position: relative;
  width: 65%;
  margin: 20px auto 0 auto;
  background-color: aqua;
}

.banner-slider .bxslider {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: nowrap;
}

.banner-slider .bxslider li {
  display: flex;
  justify-content: start;
  flex-direction: column;
  align-items: left;
  background-color: aqua;
  margin: 27px;
  width: 346px;
  height: 490px;
  padding: 17px;
}



.banner-slider .slider-controls {
  display: none;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  align-items: center;
  justify-content: space-between;
  padding: 0 5px;
}

.banner-slider .slider-controls .slide-prev, .banner-slider .slider-controls .slide-next {
  content: '';
  border-bottom: 3px solid #25A8E0;
  border-right: 3px solid #25A8E0;
  width: 23px;
  height: 23px;
  cursor: pointer;
}

.banner-slider .slider-controls .slide-prev {
  transform: rotate(135deg);
}

.banner-slider .slider-controls .slide-next {
  transform: rotate(-45deg);
}

.elements span{
  font-size: 18px;
  font-family: Biciclette_Normal;
  padding: 26px 0 23px ;
  letter-spacing: 0.54px;
  color: #6BBFE8;
  text-align: left;
}
.elements img{
  width: 309px;
  height: 309px;
}

.elements p{
max-height: 16rem;
max-width: 18rem;
}

.elementBox{
  display: flex;
  flex-direction: column;
  width: 320px;
  background-color: #fff;
  align-items: center;
}
<!DOCTYPE html>
<html>

<head>

    <title>Infinite Slider</title>
    <link rel="stylesheet" href="articles2.css">

</head>

<body>

    <div class="banner-slider">

        <ul class="bxslider">
            <li class="elements">
                <div class="elementBox">
                    <img src="https://picsum.photos/200/300?image=10">
                    <span>1.ro</span>
                    <p>WORDS words words words words words words words words words words words words words words </p>
                </div>
            </li>
            <li class="elements">
                <div class="elementBox">
                    <img src="https://picsum.photos/200/300?image=10">
                    <span>2.ro</span>
                    <p>WORDS words words words words words words words words words words words words words words </p>
                </div>
            </li>
            <li class="elements">
                <div class="elementBox">
                <img src="https://picsum.photos/200/300?image=10">
                <span>3.ro</span>
                    <p>WORDS words words words words words words words words words words words words words words </p>
            </div>
            </li>
            <li class="elements">
                <div class="elementBox">
                <img src="https://picsum.photos/200/300?image=10">
                <span>4.ro</span>
                    <p>WORDS words words words words words words words words words words words words words words </p>
            </div>
            </li>
            <li class="elements">
                <div class="elementBox">
                <img src="https://picsum.photos/200/300?image=10">
                <span>5.ro</span>
                    <p>WORDS words words words words words words words words words words words words words words </p>
            </div>
            </li>
            <li class="elements">
                <div class="elementBox">
                <img src="https://picsum.photos/200/300?image=10">
                <span>6</span>
                    <p>WORDS words words words words words words words words words words words words words words </p>
            </div>
            </li>

        </ul>

        <div class="slider-controls">
            <span class="slide-prev"></span>
            <span class="slide-next"></span>
        </div>

    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript" src="articles2.js"></script>

</body>

</html>

0 Answers
Related