44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
import { elementTransitionEnd } from './utils.js';
 | 
						|
export default function effectVirtualTransitionEnd({
 | 
						|
  swiper,
 | 
						|
  duration,
 | 
						|
  transformElements,
 | 
						|
  allSlides
 | 
						|
}) {
 | 
						|
  const {
 | 
						|
    activeIndex
 | 
						|
  } = swiper;
 | 
						|
  const getSlide = el => {
 | 
						|
    if (!el.parentElement) {
 | 
						|
      // assume shadow root
 | 
						|
      const slide = swiper.slides.filter(slideEl => slideEl.shadowEl && slideEl.shadowEl === el.parentNode)[0];
 | 
						|
      return slide;
 | 
						|
    }
 | 
						|
    return el.parentElement;
 | 
						|
  };
 | 
						|
  if (swiper.params.virtualTranslate && duration !== 0) {
 | 
						|
    let eventTriggered = false;
 | 
						|
    let transitionEndTarget;
 | 
						|
    if (allSlides) {
 | 
						|
      transitionEndTarget = transformElements;
 | 
						|
    } else {
 | 
						|
      transitionEndTarget = transformElements.filter(transformEl => {
 | 
						|
        const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;
 | 
						|
        return swiper.getSlideIndex(el) === activeIndex;
 | 
						|
      });
 | 
						|
    }
 | 
						|
    transitionEndTarget.forEach(el => {
 | 
						|
      elementTransitionEnd(el, () => {
 | 
						|
        if (eventTriggered) return;
 | 
						|
        if (!swiper || swiper.destroyed) return;
 | 
						|
        eventTriggered = true;
 | 
						|
        swiper.animating = false;
 | 
						|
        const evt = new window.CustomEvent('transitionend', {
 | 
						|
          bubbles: true,
 | 
						|
          cancelable: true
 | 
						|
        });
 | 
						|
        swiper.wrapperEl.dispatchEvent(evt);
 | 
						|
      });
 | 
						|
    });
 | 
						|
  }
 | 
						|
} |