滑动滑块—活动索引

时间:2019-08-18 22:35:08

标签: javascript swiper

我正在尝试为滑块(用Swiper制造)的幻灯片编号制作动画,但是它不能像预期的那样工作,并且我很难找到我所缺少的内容。底部的幻灯片编号应该更改,但是当我单击它时什么也没有发生。

这是代码的JSfiddle

这是html

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/css/swiper.min.css">

<!-- Section Testimonies -->
<div class="section testimonial" id="testimonial">
  <div class="swiper-container faded-text">
    <div class="swiper-wrapper">
      <div class="swiper-slide">
        <p class="p-large">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.
        </p>
        <p><strong>Johnny Doe</strong></p>
        <p>Lorem ipsum dolor, Company name</p>
      </div>
      <div class="swiper-slide">
        <p class="p-large">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.
        </p>
        <p><strong>Johnny Doe</strong></p>
        <p>Lorem ipsum dolor, Company name</p>
      </div>
      <div class="swiper-slide">
        <p class="p-large">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.
        </p>
        <p><strong>Johnny Doe</strong></p>
        <p>Lorem ipsum dolor, Company name</p>
      </div>
      <div class="swiper-slide">
        <p class="p-large">
          Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.
        </p>
        <p><strong>Johnny Doe</strong></p>
        <p>Lorem ipsum dolor, Company name</p>
      </div>
      <div class="swiper-slide"></div>
    </div>
    <!-- Add Pagination -->
    <div class="swiper-pagination"></div>
    <div class="swiper-navigation">
      <div class="swiper-button-prev"></div>
      <!-- <div class="swiper-counter"><span class="swiper-numbers__current">01</span> / 05</div> -->
      <div class="swiper-counter"></div>
      <div class="swiper-button-next"></div>
    </div>

  </div>
</div>
<!-- / Section Testimonies -->

<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.5.0/js/swiper.min.js"></script>

css

#testimonial {

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

    .swiper-wrapper {

      .swiper-slide {
        text-align: left;
        width: 50%;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: flex-start;
        max-width: 800px;

        .p-large {
          margin-bottom: 120px;
        }
      }

      .swiper-slide-next {
        opacity: 0.3;
      }
    }

    .swiper-navigation {
      margin-top: 200px;
      position: relative;
      max-width: 20vw;
      display: flex;
      justify-content: flex-start;
      align-items: center;

      .swiper-counter,
      .swiper-counter span {
        position: relative;
        z-index: 99999;
      }

      .swiper-counter .next,
      .swiper-counter .count {
        position: relative;
      }

      .swiper-counter .next {
        transform: translateY(-12px);
        right: 10px;
      }

      .swiper-button-prev {
        position: relative;
        top: 0;
        margin-top: 0;
        left: 0;
        background-size: 20px 20px;
      }

      .swiper-counter {
        margin: 0 60px;
      }

      .swiper-button-next {
        position: relative;
        top: 0;
        margin-top: 0;
        right: 0;
        background-size: 20px 20px;
      }
    }
  }
}

最后是javascript

const counter = $('.swiper-counter');
let currentCount = $('<span class="count">1<span/>');
counter.append(currentCount);

function photosChange(swiper) {
  const index = swiper.activeIndex + 1;

  const $current = $('.photo-slide').eq(index);

  const dur = 0.8;

  const prevCount = $('.count');
  currentCount = $(`<span class="count next">${index}<span/>`);
  currentCount.appendTo(counter);
  TweenMax.to(prevCount, dur, {
    y: -12,
    opacity: 0,
    onCompleteParams: [prevCount],

    onComplete(prevCount) {
      prevCount.remove();
    },
    ease: Power4.easeOut,
  });
  TweenMax.fromTo(
    currentCount,
    dur,
    {
      y: 12,
      opacity: 0,
    },
    {
      y: 0,
      opacity: 1,
      ease: Power4.easeOut,
    },
  );
}

const swiper = new Swiper('.swiper-container', {
  slidesPerView: 2,
  spaceBetween: 200,
  loop: false,
  navigation: {
    nextEl: '.swiper-button-next',
    prevEl: '.swiper-button-prev',
  },
  onSlideChangeStart: photosChange,
});

2 个答案:

答案 0 :(得分:0)

类似onSlideChangeStart: photosChange的方法无效。

您可以将其添加到代码的末尾(应该在刷卡器初始化之后):

swiper.on('slideChange', function () {
  $('.count').text(this.activeIndex + 1);
});

您也可以将photosChange(swiper)的功能传递给该函数。
希望对您有所帮助。

答案 1 :(得分:0)

如果您想获得真正的索引,请使用此代码。

swiper.on('transitionEnd', function () {
   $('.count').text(swiper.realIndex + 1);
});