【问题标题】:Swiper Slider...removing the arrowsSwiper Slider...移除箭头
【发布时间】:2022-03-08 17:38:37
【问题描述】:

除非需要箭头,否则我想删除 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 上不起作用,这让我更加困惑。

【问题讨论】:

    标签: javascript jquery swiper


    【解决方案1】:

    你能检查一下吗?我为你创建了一个 sn-p,我将解释我创建了一个函数,当视口 小于 1024 这是3张幻灯片然后箭头会出现一次大于1024然后箭头会消失只要它的4张幻灯片如你所愿.

    小提琴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>

    【讨论】:

    • 太棒了。这行得通。太感谢了。我会研究你的代码,这样我就可以学习了。
    • 不客气,这很好,如果它对你有用,请投票给它。谢谢
    【解决方案2】:

    不过,我设法用另一种方式来完成这项工作。 我只是想在导航箭头未被“禁用”时显示它们。

    Swiper API 上,我们有 disabledClass,这是在禁用箭头时应用的类(无需进行导航,即滑块的开头或结尾)。

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

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

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

    【讨论】:

    • 这是最好最优雅的解决方案。谢谢!
    【解决方案3】:

    我的第一个想法是

    console.log(slides);
    

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

    同时修复控制台错误:

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

    似乎找不到此元素:

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

    【讨论】:

    • 感谢您的回复。上面的回复让它工作了,但我也会尝试你的建议,这样我就可以练习成为一个更好的编码器。谢谢!
    【解决方案4】:

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

    CSS ->

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

    HTML ->

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

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      相关资源
      最近更新 更多