朱桂飞
2023-03-20 3755d8c086441ce54864121ca4eb6f800fb914a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import effectInit from '../../shared/effect-init.js';
import effectTarget from '../../shared/effect-target.js';
export default function EffectCarousel({
    swiper,
    extendParams,
    on
}) {
    extendParams({
        carouselEffect: {}
    });
 
    const setTranslate = () => {
        const scaleStep = 0.2;
        const zIndexMax = swiper.slides.length;
        for (let i = 0; i < swiper.slides.length; i += 1) {
            const slideEl = swiper.slides[i];
            const slideProgress = swiper.slides[i].progress;
            const absProgress = Math.abs(slideProgress);
            let modify = 1;
            if (absProgress > 1) {
                modify = (absProgress - 1) * 0.3 + 1;
            }
            const translate = `${slideProgress * modify * 50}%`;
            const scale = 1 - absProgress * scaleStep;
            const zIndex = zIndexMax - Math.abs(Math.round(slideProgress));
            const slideTransform = `translateX(${translate}) scale(${scale})`;
            slideEl.transform(slideTransform);
            slideEl.css({
                zIndex: zIndex
            })
            if (absProgress > 3) {
                slideEl.css({
                    opacity: 0
                })
            } else {
                slideEl.css({
                    opacity: 1
                })
            }
        }
    };
 
    const setTransition = duration => {
        const {
            transformEl
        } = swiper.params.coverflowEffect;
        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;
        for (var i = 0; i < $transitionElements.length; i++) {
            $transitionElements[i].transition(duration);
        }
    };
 
    effectInit({
        effect: 'carousel',
        swiper,
        on,
        setTranslate,
        setTransition,
        perspective: () => true,
        overwriteParams: () => ({
            watchSlidesProgress: true,
            slidesPerView: 'auto',
            centeredSlides: true,
        })
    });
}