zhuguifei
2 天以前 7941623b1fb108a154ea4270d7c7e2df6031f6e5
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
67
68
69
70
71
72
73
74
75
76
77
78
import effectInit from '../../shared/effect-init.js';
import effectTarget from '../../shared/effect-target.js';
import effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';
export default function EffectFade({
    swiper,
    extendParams,
    on
}) {
    extendParams({
        fadeEffect: {
            crossFade: false,
            transformEl: null
        }
    });
 
    const setTranslate = () => {
        const {
            slides
        } = swiper;
        const params = swiper.params.fadeEffect;
        for (let i = 0; i < slides.length; i += 1) {
            const $slideEl = swiper.slides[i];
            const offset = $slideEl.swiperSlideOffset;
            let tx = -offset;
            if (!swiper.params.virtualTranslate) tx -= swiper.translate;
            let ty = 0;
 
            if (!swiper.isHorizontal()) {
                ty = tx;
                tx = 0;
            }
 
            const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl.progress), 0) :
                1 + Math.min(Math.max($slideEl.progress, -1), 0);
            const $targetEl = effectTarget(params, $slideEl);
            $targetEl.css({
                opacity: slideOpacity
            })
            $targetEl.transform(`translate3d(${tx}px, ${ty}px, 0px)`);
            if (swiper.params.willChange) {
                $targetEl.willChange("opacity");
            }
            slides[i].addClass('swiper-slide-fade')
        }
    };
 
    const setTransition = duration => {
        const {
            transformEl
        } = swiper.params.fadeEffect;
        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;
        for (let i = 0; i < $transitionElements.length; i += 1) {
            $transitionElements[i].transition(duration);
        }
 
        effectVirtualTransitionEnd({
            swiper,
            duration,
            transformEl,
            allSlides: true
        });
    };
 
    effectInit({
        effect: 'fade',
        swiper,
        on,
        setTranslate,
        setTransition,
        overwriteParams: () => ({
            slidesPerView: 1,
            slidesPerGroup: 1,
            watchSlidesProgress: true,
            spaceBetween: 0,
            virtualTranslate: !swiper.params.cssMode
        })
    });
}