Search code examples
javascriptjqueryswiper.js

Swiper Slider – removing the arrows


I would like to remove arrows on iDangerous Swiper Slider unless the arrows are needed. For example, I currently have 4 images side by side. If a user is on a mobile device (or a smaller computer screen), and less than 4 images show up, then I want the arrows to show up so that the user can scroll. However, if all 4 of the images show up, then I don't want the arrows to appear.

I tried to do this with jQuery, but the following code doesn't work:

<script>
    var swiper = new Swiper('.swiper-container', {
                    slidesPerView: 4,
                    slidesPerGroup: 4,
                    loopedSlides: 4,
                    centeredSlides: false,
                    spaceBetween: 0,
                    grabCursor: true,
                    loop:false,
                    pagination: '.swiper-pagination',
                    paginationClickable: true,
                    breakpoints: {
                        1200: {
                            slidesPerView: 4,
                            loopedSlides: 4,
                            spaceBetween: 10
                        },
                        1024: {
                            slidesPerView: 3,
                            loopedSlides: 3,
                            spaceBetween: 10
                        },
                        768: {
                            slidesPerView: 2,
                            loopedSlides: 2,
                            spaceBetween: 10
                        },
                        675: {
                            slidesPerView: 1,
                            loopedSlides: 1,
                            spaceBetween: 20
                        }
                    }
                });
    document.querySelector('.prepend-2-slides').addEventListener('click', function (e) {
      e.preventDefault();
      swiper.prependSlide([
        '<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>',
        '<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>'
        ]);
    });
    document.querySelector('.prepend-slide').addEventListener('click', function (e) {
      e.preventDefault();
      swiper.prependSlide('<div class="swiper-slide">Slide ' + (--prependNumber) + '</div>');
    });
    document.querySelector('.append-slide').addEventListener('click', function (e) {
      e.preventDefault();
      swiper.appendSlide('<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>');
    });
    document.querySelector('.append-2-slides').addEventListener('click', function (e) {
      e.preventDefault();
      swiper.appendSlide([
        '<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>',
        '<div class="swiper-slide">Slide ' + (++appendNumber) + '</div>'
        ]);
    });
    var slides = document.querySelectorAll('.swiper-wrapper .swiper-slide');
    var arrowPrev = document.querySelector('.swiper-button-prev');
    var arrowNext = document.querySelector('.swiper-button-prev');

    if (slides.length < 4) {
    arrowPrev.style.display = 'none';
    arrowNext.style.display = 'none';
     }
</script>

That didn't work. In fact, it messed up the slider (instead of having 4 separate images, I had one image across the screen. Then I replaced the last part with the following code, and it changed it to one image across the screen again, and the arrows were still there.

var swiper__slidecount = mySwiper.slides.length;
if (swiper__slidecount > 3) {
  $('.swiper-button-prev,.swiper-button-next').remove();
}

Here's a link to the website Here's a JS Fiddle link. Strangely enough, the code that works on my website doesn't work on JS Fiddle, which has confused me even more.


Solution

  • Can you please check it out i have created a snippet for you and i will explain i have created a function that check the view port as its defined in swiper breakpoints when the viewport less than 1024 which is 3 slides then the arrow will appear once is greater than 1024 then the arrow will disappear as long as its 4 slides as you wanted.

    Fiddle https://jsfiddle.net/61LLnfh7/6/

    var mySwiper = new Swiper('.swiper-container', {
      slidesPerView: 4,
      slidesPerGroup: 4,
      loopedSlides: 4,
      navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
      },
      breakpoints: {
        1200: {
          slidesPerView: 4,
          loopedSlides: 4,
          spaceBetween: 10
        },
        1024: {
          slidesPerView: 3,
          loopedSlides: 3,
          spaceBetween: 10
        },
        768: {
          slidesPerView: 2,
          loopedSlides: 2,
          spaceBetween: 10
        },
        675: {
          slidesPerView: 1,
          loopedSlides: 1,
          spaceBetween: 20,
        }
      },
      on: {
        init: function() {
    			checkArrow();
        },
        resize: function () {
    			checkArrow();
        }
      }
    });
    
    function checkArrow() {
      var swiperPrev = document.querySelector('.swiper-button-prev');
      var swiperNext = document.querySelector('.swiper-button-next');
      if ( window.innerWidth < 1024  ) {
        console.log('Success', window.innerWidth);
        swiperPrev.style.display = 'block';
        swiperNext.style.display = 'block';
      } else {
        swiperPrev.style.display = 'none';
        swiperNext.style.display = 'none';
      }
    }
    .swiper-wrapper .swiper-slide {
      background-color: #eee;
      height: 250px;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    
    .swiper-button-prev,
    .swiper-button-next {
      display: none;
    }
    <link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.6/css/swiper.min.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.6/js/swiper.min.js"></script>
    
    <!-- Slider main container -->
    <div class="swiper-container">
        <!-- Additional required wrapper -->
        <div class="swiper-wrapper">
            <!-- Slides -->
            <div class="swiper-slide">Slide 1</div>
            <div class="swiper-slide">Slide 2</div>
            <div class="swiper-slide">Slide 3</div>
            <div class="swiper-slide">Slide 4</div>
            
        </div>
        <!-- If we need pagination -->
        <div class="swiper-pagination"></div>
    
        <!-- If we need navigation buttons -->
        <div class="swiper-button-prev"></div>
        <div class="swiper-button-next"></div>
    
    </div>