updateActiveIndex.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. export default function updateActiveIndex(newActiveIndex) {
  2. const swiper = this;
  3. const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
  4. const {
  5. slidesGrid,
  6. snapGrid,
  7. params,
  8. activeIndex: previousIndex,
  9. realIndex: previousRealIndex,
  10. snapIndex: previousSnapIndex
  11. } = swiper;
  12. let activeIndex = newActiveIndex;
  13. let snapIndex;
  14. if (typeof activeIndex === 'undefined') {
  15. for (let i = 0; i < slidesGrid.length; i += 1) {
  16. if (typeof slidesGrid[i + 1] !== 'undefined') {
  17. if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
  18. activeIndex = i;
  19. } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
  20. activeIndex = i + 1;
  21. }
  22. } else if (translate >= slidesGrid[i]) {
  23. activeIndex = i;
  24. }
  25. } // Normalize slideIndex
  26. if (params.normalizeSlideIndex) {
  27. if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
  28. }
  29. }
  30. if (snapGrid.indexOf(translate) >= 0) {
  31. snapIndex = snapGrid.indexOf(translate);
  32. } else {
  33. const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
  34. snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
  35. }
  36. if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
  37. if (activeIndex === previousIndex) {
  38. if (snapIndex !== previousSnapIndex) {
  39. swiper.snapIndex = snapIndex;
  40. swiper.emit('snapIndexChange');
  41. }
  42. return;
  43. } // Get real index
  44. const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
  45. Object.assign(swiper, {
  46. snapIndex,
  47. realIndex,
  48. previousIndex,
  49. activeIndex
  50. });
  51. swiper.emit('activeIndexChange');
  52. swiper.emit('snapIndexChange');
  53. if (previousRealIndex !== realIndex) {
  54. swiper.emit('realIndexChange');
  55. }
  56. if (swiper.initialized || swiper.params.runCallbacksOnInit) {
  57. swiper.emit('slideChange');
  58. }
  59. }