javascript 显示网页上的幻灯片数量

bt1cpqcv  于 2023-06-20  发布在  Java
关注(0)|答案(2)|浏览(157)

我写了一个自定义滑块,如下面的codepen所示:
http://codepen.io/anon/pen/NqQpjG
我添加了额外的功能,计算幻灯片的总数被移动。例如,如果幻灯片总数为8,则起始值如下所示:
Slides: 0/8。当一张幻灯片移动时,它变成Slides: 1/8,依此类推。下面是我的代码:

<div>
            <span id="numberSlides">0/0 Offers</span>
        </div>

JS

var slide = new slide('.swiper-slide', {
        var totalSlides = 10;
        var newSlide = document.getElementsByClassName('swiper-slide');
        var newValue = newSlide + 1;
        document.getElementById('numberSlides').innerHTML = newValue + "/" + totalSlides + " Slides";
    });

但它不起作用。如何显示移动的幻灯片数量?

编辑:

我的幻灯片是在这些divs

<div class="swiper-container">
        <div class="swiper-wrapper">
            <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 class="swiper-slide">Slide 5</div>
            <div class="swiper-slide">Slide 6</div>
            <div class="swiper-slide">Slide 7</div>
            <div class="swiper-slide">Slide 8</div>
            <div class="swiper-slide">Slide 9</div>
            <div class="swiper-slide">Slide 10</div>
        </div>
        <!-- Add Pagination -->
        <div class="swiper-pagination"></div>
    </div>
vuv7lop3

vuv7lop31#

使用此属性

runCallbacksOnInit: true, 
  onInit: function(sw){}, //runs callback in initialization
  onSlideChangeEnd: function(sw){} //runs callback in slide change end

Demo

var swiper = new Swiper('.swiper-container', {
  pagination: '.swiper-pagination',
  paginationClickable: true,
  nextButton: '.swiper-button-next',
  prevButton: '.swiper-button-prev',
  spaceBetween: 30,
  centeredSlides: true,
  autoplay: 3000,
  autoplayDisableOnInteraction: false,
  runCallbacksOnInit: true,
  onInit: function(sw){
    var offer = document.querySelector('#numberSlides');
    offer.innerHTML = (sw.activeIndex +  1) + '/' + sw.slides.length + 'Offers';
  },
  onSlideChangeEnd: function(sw){
    var offer = document.querySelector('#numberSlides');
    offer.innerHTML = (sw.activeIndex +  1) + '/' + sw.slides.length + 'Offers';
  }
});
#numberSlides{
  position: absolute; 
  bottom: 0;
  left: 0;
  z-index: 9999;
}

html,
body {
  position: relative;
  height: 100%;
}

body {
  background: #eee;
  font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
  font-size: 14px;
  color: #000;
  margin: 0;
  padding: 0;
}

.swiper-container {
  width: 100%;
  height: 100%;
}

.swiper-slide {
  text-align: center;
  font-size: 18px;
  background: #fff;
  /* Center slide text vertically */
  
  display: -webkit-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  justify-content: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.1.2/js/swiper.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/3.1.2/css/swiper.css">
<div class="swiper-container">
  <div class="swiper-wrapper">
    <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 class="swiper-slide">Slide 5</div>
    <div class="swiper-slide">Slide 6</div>
    <div class="swiper-slide">Slide 7</div>
    <div class="swiper-slide">Slide 8</div>
    <div class="swiper-slide">Slide 9</div>
    <div class="swiper-slide">Slide 10</div>
  </div>
  <!-- Add Pagination -->
  <div class="swiper-pagination swiper-pagination-clickable"></div>
  <div id="numberSlides">
    0/0 Offers
  </div>
</div>
h43kikqp

h43kikqp2#

100% swiper API解决方案(适用于循环true -or- false &页面上有多个swiper)。

如果你想使用自己的元素。
而不是使用自己的逻辑/计算total-slides-干净的解决方案是得到幻灯片的总数beforeInit(在dupluaction幻灯片)。

a.当前幻灯片

使用realIndex + 1(因为这是零基索引=> 0 ==第一张幻灯片)并更新slideChange by innerHTML属性上的计数器。

slideChange: function(){
   var currentSlide = this.realIndex + 1;
   document.querySelector('.current-slide').innerHTML = currentSlide;
},

B.幻灯片总数

beforeInit-事件将在初始化之前触发(在刷卡器复制幻灯片之前)https://swiperjs.com/swiper-api#event-beforeInit
wrapperEl - vanilla HTMLEementelement with slider wrapper HTML element.
querySelectorAll(Vanilla js)this(swiper.wrapperEl)swiper-slidelength属性。

on: {
  beforeInit: function () {
    let numOfSlides = this.wrapperEl.querySelectorAll(".swiper-slide").length;
    console.log(numOfSlides);
}

代码片段

var swiper = new Swiper('.swiper-container', {
    loop: true,
    pagination: {
      el: '.swiper-pagination',
    },
    /* events */
    on: {
      slideChange: function(){
        var currentSlide = this.realIndex + 1;
        console.log("currentSlide is:" + currentSlide);
        document.querySelector('.current-slide').innerHTML = currentSlide;
      },
      beforeInit: function(){
      let numOfSlides = this.wrapperEl.querySelectorAll(".swiper-slide").length;
      document.querySelector('.total-slides').innerHTML = numOfSlides;
      }
    }
  });
html, body {
  position: relative;
  height: 100%;
}

.counter{
  border: 3px solid red;
  text-align: center;
}
strong{
  color: red;
  font-size: 32px;
}
.swiper-container {
  width: 100%;
  height: 100px;
}
.swiper-slide {
  text-align: center;
  font-size: 18px;
  background: #fff;
  display: -webkit-flex;
  display: flex;
  justify-content: center;
  align-items: center;
}

    on: {
      beforeInit: function () {
        let numOfSlides = this.wrapperEl.querySelectorAll(".swiper-slide").length;
        console.log(numOfSlides);
      },
<link rel="stylesheet" href="https://unpkg.com/swiper@6.3.4/swiper-bundle.min.css">
  
<p class="counter">
<strong class="current-slide">current-slide</strong>
of
<strong class="total-slides">Total</strong>
<p>
  
<!-- Swiper -->
<div class="swiper-container">
  <div class="swiper-wrapper">
    <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 class="swiper-slide">Slide 5</div>
    <div class="swiper-slide">Slide 6</div>
    <div class="swiper-slide">Slide 7</div>
    <div class="swiper-slide">Slide 8</div>
    <div class="swiper-slide">Slide 9</div>
    <div class="swiper-slide">Slide 10</div>
  </div>
  <!-- Add Pagination -->
  <div class="swiper-pagination"></div>
</div>

  
  <script src="https://unpkg.com/swiper@6.3.4/swiper-bundle.min.js"></script>

type:fraction

https://swiperjs.com/api/#pagination
Swiper API type: fraction分页:

pagination: {
  el: '.swiper-pagination',
  type: "fraction"
},

例如renderFraction

var swiper = new Swiper('.swiper-container', {
  //...
  renderFraction: function (currentClass, totalClass) {
      return '<span class="' + currentClass + '"></span>' +
              ' of ' +
              '<span class="' + totalClass + '"></span>';
  }
});

相关问题