@zebra-ui/swiper
Version:
专为多端设计的高性能swiper轮播组件库,支持多种复杂的 3D swiper轮播效果。
41 lines (29 loc) • 1.14 kB
text/typescript
import type { OnScroll } from '../../../types/components/core/events/on-scroll'
import type { SwiperInterface } from '../../../types/swiper-class'
const onScroll: OnScroll = function (this: SwiperInterface) {
const swiper = this as SwiperInterface & { previousTranslate?: number }
const { wrapperEl, rtlTranslate, enabled } = swiper
if (!enabled) return
swiper.previousTranslate = swiper.translate
if (swiper.isHorizontal()) {
swiper.translate = -wrapperEl.scrollLeft
} else {
swiper.translate = -wrapperEl.scrollTop
}
// eslint-disable-next-line
if (swiper.translate === 0) swiper.translate = 0
swiper.updateActiveIndex()
swiper.updateSlidesClasses()
let newProgress: number
const translatesDiff = swiper.maxTranslate() - swiper.minTranslate()
if (translatesDiff === 0) {
newProgress = 0
} else {
newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff
}
if (newProgress !== swiper.progress) {
swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate)
}
swiper.emit('setTranslate', swiper.translate, false)
}
export default onScroll