滑动滑块...删除箭头

Swiper Slider...removing the arrows

我想删除 iDangerous Swiper Slider 上的箭头,除非需要这些箭头。例如,我目前有 4 张并排的图片,如果用户使用移动设备(或较小的计算机屏幕)并且显示的图片少于 4 张,那么我希望箭头显示出来以便用户可以滚动。但是,如果所有 4 个图像都显示,那么我不希望出现箭头。

我试着用 jQuery 来做这个,但是我有的东西不起作用。

<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>

那没有用,事实上,它弄乱了滑块(我没有 4 个单独的图像,而是在屏幕上有一个图像。然后我用以下代码替换了最后一部分,它也改变了它到屏幕上的一张图片,箭头仍然在那里。

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

这是一个link to the website 这是一个 JS Fiddle link. 奇怪的是,在我的网站上有效的代码在 JS 上不起作用 Fiddle,这让我更加困惑。

我的第一个想法是

console.log(slides);

并查看它在 运行 时的编号。

同时修复控制台错误:

Uncaught TypeError: Cannot read property 'addEventListener' of null
at (index):449

似乎未找到此元素:

document.querySelector('.prepend-2-slides').addEventListener('click', function (e) {

你能检查一下吗?我已经为你创建了一个片段,我会解释我已经创建了一个函数,当视口 小于 10243 slides 然后箭头会出现一次 大于 1024 然后箭头会消失只要它 4张幻灯片随心所欲。

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>

不过我设法用另一种方式让它工作。 我只是想在它们不是 'disabled'.

时显示导航箭头

Swiper API 上,我们有 disabledClass,这是 class 在箭头被禁用时应用(没有导航要完成,即滑块的开始或结束)。

navigation: {
    nextEl: '.swiper-button-next',
    prevEl: '.swiper-button-prev',
    disabledClass: 'disabled_swiper_button'
  },

然后在 css 方面只是简单地:

.disabled_swiper_button {
    opacity: 0;
    cursor: auto;
    pointer-events: none;
}

我也在找答案所以就放在这里了。 如果网站在移动设备上,我的要求是隐藏箭头 我使用以下代码使其工作 ->

CSS ->

.swiper-button-next,
.swiper-button-prev{
    visibility: hidden;
  }

HTML ->

<div class="swiper-button-next" ></div>
<div class="swiper-button-prev" ></div>