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);
 | |
|       });
 | |
|     });
 | |
|   }
 | |
| } |