slideToClickedSlide.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { elementChildren, nextTick } from '../../shared/utils.js';
  2. export default function slideToClickedSlide() {
  3. const swiper = this;
  4. const {
  5. params,
  6. slidesEl
  7. } = swiper;
  8. const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
  9. let slideToIndex = swiper.clickedIndex;
  10. let realIndex;
  11. const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;
  12. if (params.loop) {
  13. if (swiper.animating) return;
  14. realIndex = parseInt(swiper.clickedSlide.getAttribute('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 = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
  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 = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
  28. nextTick(() => {
  29. swiper.slideTo(slideToIndex);
  30. });
  31. } else {
  32. swiper.slideTo(slideToIndex);
  33. }
  34. } else {
  35. swiper.slideTo(slideToIndex);
  36. }
  37. }