@zebra-ui/swiper
Version:
专为多端设计的高性能swiper轮播组件库,支持多种复杂的 3D swiper轮播效果。
49 lines (43 loc) • 1.68 kB
text/typescript
import { isWeb } from '../../shared/utils'
import type { UpdateSlidesOffset } from '../../../types/components/core/update/update-slides-offset'
import type { SwiperInterface } from '../../../types/swiper-class'
import type { SwiperItemInstance } from '../../../types/swiper-item-instance.d.ts'
const updateSlidesOffset: UpdateSlidesOffset = function (
this: SwiperInterface
) {
const swiper = this
const { slides, isElement, isHorizontal, wrapperEl } = swiper
const minusOffset = isElement
? isHorizontal()
? wrapperEl.offsetLeft
: wrapperEl.offsetTop
: 0
for (let i = 0; i < slides.length; i += 1) {
if (isWeb()) {
;(slides[i] as SwiperItemInstance).swiperSlideOffset =
(isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) -
minusOffset -
swiper.cssOverflowAdjustment()
} else {
const isVirtual =
swiper.virtual &&
typeof swiper.params.virtual === 'object' &&
swiper.params.virtual.enabled
const calcOffsetDiff = isVirtual ? swiper.virtual.offset : 0
const calcOffset =
((slides[i] as SwiperItemInstance).swiperSlideSize +
Number(swiper.params.spaceBetween)) *
i +
calcOffsetDiff
const slideOffsetLeft =
(slides[i] as SwiperItemInstance).swiperItemRect?.left || calcOffset
const slideOffsetTop =
(slides[i] as SwiperItemInstance).swiperItemRect?.top || calcOffset
;(slides[i] as SwiperItemInstance).swiperSlideOffset =
(isHorizontal() ? slideOffsetLeft : slideOffsetTop) -
minusOffset -
swiper.cssOverflowAdjustment()
}
}
}
export default updateSlidesOffset