addSlide.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. export default function addSlide(index, slides) {
  2. const swiper = this;
  3. const {
  4. $wrapperEl,
  5. params,
  6. activeIndex
  7. } = swiper;
  8. let activeIndexBuffer = activeIndex;
  9. if (params.loop) {
  10. activeIndexBuffer -= swiper.loopedSlides;
  11. swiper.loopDestroy();
  12. swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
  13. }
  14. const baseLength = swiper.slides.length;
  15. if (index <= 0) {
  16. swiper.prependSlide(slides);
  17. return;
  18. }
  19. if (index >= baseLength) {
  20. swiper.appendSlide(slides);
  21. return;
  22. }
  23. let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
  24. const slidesBuffer = [];
  25. for (let i = baseLength - 1; i >= index; i -= 1) {
  26. const currentSlide = swiper.slides.eq(i);
  27. currentSlide.remove();
  28. slidesBuffer.unshift(currentSlide);
  29. }
  30. if (typeof slides === 'object' && 'length' in slides) {
  31. for (let i = 0; i < slides.length; i += 1) {
  32. if (slides[i]) $wrapperEl.append(slides[i]);
  33. }
  34. newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
  35. } else {
  36. $wrapperEl.append(slides);
  37. }
  38. for (let i = 0; i < slidesBuffer.length; i += 1) {
  39. $wrapperEl.append(slidesBuffer[i]);
  40. }
  41. if (params.loop) {
  42. swiper.loopCreate();
  43. }
  44. if (!params.observer) {
  45. swiper.update();
  46. }
  47. if (params.loop) {
  48. swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  49. } else {
  50. swiper.slideTo(newActiveIndex, 0, false);
  51. }
  52. }