UNPKG

@zebra-ui/swiper

Version:

专为多端设计的高性能swiper轮播组件库,支持多种复杂的 3D swiper轮播效果。

84 lines (75 loc) 1.9 kB
import { isWeb } from '../../shared/utils' import type { UpdateClickedSlide } from '../../../types/components/core/update/update-clicked-slide' import type { SwiperInterface } from '../../../types/swiper-class' const updateClickedSlide: UpdateClickedSlide = function ( this: SwiperInterface, el, path ) { const swiper = this const { params } = swiper let slide: HTMLElement | undefined if (isWeb()) { slide = el.closest(`.${params.slideClass}, swiper-slide`) as | HTMLElement | undefined if ( !slide && swiper.isElement && path && path.length > 1 && path.includes(el) ) { ;[...path.slice(path.indexOf(el) + 1, path.length)].forEach((pathEl) => { if ( !slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`) ) { slide = pathEl } }) } } else { slide = el } let slideFound = false let slideIndex: number | undefined if (slide) { for (let i = 0; i < swiper.slides.length; i += 1) { if (swiper.slides[i] === slide) { slideFound = true slideIndex = i break } } } if (slide && slideFound) { swiper.clickedSlide = slide if ( swiper.virtual && typeof swiper.params.virtual === 'object' && swiper.params.virtual.enabled ) { swiper.clickedIndex = parseInt( slide.getAttribute('data-swiper-slide-index') || '0', 10 ) } else { swiper.clickedIndex = Number(slideIndex) } } else { swiper.clickedSlide = undefined as any // @ts-ignore swiper.clickedIndex = undefined return } if ( params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex ) { swiper.slideToClickedSlide() } } export default updateClickedSlide