addSlide.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. export default function addSlide(index, slides) {
  2. const swiper = this;
  3. const {
  4. params,
  5. activeIndex,
  6. slidesEl
  7. } = swiper;
  8. let activeIndexBuffer = activeIndex;
  9. if (params.loop) {
  10. activeIndexBuffer -= swiper.loopedSlides;
  11. swiper.loopDestroy();
  12. swiper.recalcSlides();
  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[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]) slidesEl.append(slides[i]);
  33. }
  34. newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
  35. } else {
  36. slidesEl.append(slides);
  37. }
  38. for (let i = 0; i < slidesBuffer.length; i += 1) {
  39. slidesEl.append(slidesBuffer[i]);
  40. }
  41. swiper.recalcSlides();
  42. if (params.loop) {
  43. swiper.loopCreate();
  44. }
  45. if (!params.observer || swiper.isElement) {
  46. swiper.update();
  47. }
  48. if (params.loop) {
  49. swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  50. } else {
  51. swiper.slideTo(newActiveIndex, 0, false);
  52. }
  53. }