slideToClickedSlide.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import $ from '../../shared/dom.js';
  2. import { nextTick } from '../../shared/utils.js';
  3. export default function slideToClickedSlide() {
  4. const swiper = this;
  5. const {
  6. params,
  7. $wrapperEl
  8. } = swiper;
  9. const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
  10. let slideToIndex = swiper.clickedIndex;
  11. let realIndex;
  12. if (params.loop) {
  13. if (swiper.animating) return;
  14. realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
  15. if (params.centeredSlides) {
  16. if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
  17. swiper.loopFix();
  18. slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`).eq(0).index();
  19. nextTick(() => {
  20. swiper.slideTo(slideToIndex);
  21. });
  22. } else {
  23. swiper.slideTo(slideToIndex);
  24. }
  25. } else if (slideToIndex > swiper.slides.length - slidesPerView) {
  26. swiper.loopFix();
  27. slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`).eq(0).index();
  28. nextTick(() => {
  29. swiper.slideTo(slideToIndex);
  30. });
  31. } else {
  32. swiper.slideTo(slideToIndex);
  33. }
  34. } else {
  35. swiper.slideTo(slideToIndex);
  36. }
  37. }