effect-virtual-transition-end.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { elementTransitionEnd } from './utils.js';
  2. export default function effectVirtualTransitionEnd({
  3. swiper,
  4. duration,
  5. transformElements,
  6. allSlides
  7. }) {
  8. const {
  9. activeIndex
  10. } = swiper;
  11. const getSlide = el => {
  12. if (!el.parentElement) {
  13. // assume shadow root
  14. const slide = swiper.slides.filter(slideEl => slideEl.shadowEl && slideEl.shadowEl === el.parentNode)[0];
  15. return slide;
  16. }
  17. return el.parentElement;
  18. };
  19. if (swiper.params.virtualTranslate && duration !== 0) {
  20. let eventTriggered = false;
  21. let transitionEndTarget;
  22. if (allSlides) {
  23. transitionEndTarget = transformElements;
  24. } else {
  25. transitionEndTarget = transformElements.filter(transformEl => {
  26. const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;
  27. return swiper.getSlideIndex(el) === activeIndex;
  28. });
  29. }
  30. transitionEndTarget.forEach(el => {
  31. elementTransitionEnd(el, () => {
  32. if (eventTriggered) return;
  33. if (!swiper || swiper.destroyed) return;
  34. eventTriggered = true;
  35. swiper.animating = false;
  36. const evt = new window.CustomEvent('transitionend', {
  37. bubbles: true,
  38. cancelable: true
  39. });
  40. swiper.wrapperEl.dispatchEvent(evt);
  41. });
  42. });
  43. }
  44. }