zhuguifei
2025-07-04 186d172fc06dfe44dc2a61d238356e6a7db652d5
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import {
    isObject,
    extend
} from './utils.js';
 
async function updateSwiper({
    swiper,
    slides,
    passedParams,
    changedParams,
    nextEl,
    prevEl,
    paginationEl,
    scrollbarEl,
}) {
    const updateParams = changedParams.filter((key) => key !== 'children' && key !== 'direction');
    const {
        params: currentParams,
        pagination,
        navigation,
        scrollbar,
        virtual,
        thumbs
    } = swiper;
    let needThumbsInit;
    let needControllerInit;
    let needPaginationInit;
    let needScrollbarInit;
    let needNavigationInit;
    if (
        changedParams.includes('thumbs') &&
        passedParams.thumbs &&
        passedParams.thumbs.swiper &&
        currentParams.thumbs &&
        !currentParams.thumbs.swiper
    ) {
        needThumbsInit = true;
    }
    if (
        changedParams.includes('controller') &&
        passedParams.controller &&
        passedParams.controller.control &&
        currentParams.controller &&
        !currentParams.controller.control
    ) {
        needControllerInit = true;
    }
    if (
        changedParams.includes('pagination') &&
        passedParams.pagination &&
        (passedParams.pagination.el || paginationEl) &&
        (currentParams.pagination || currentParams.pagination === false) &&
        pagination &&
        !pagination.el
    ) {
        needPaginationInit = true;
    }
 
    if (
        changedParams.includes('scrollbar') &&
        passedParams.scrollbar &&
        (passedParams.scrollbar.el || scrollbarEl) &&
        (currentParams.scrollbar || currentParams.scrollbar === false) &&
        scrollbar &&
        !scrollbar.el
    ) {
        needScrollbarInit = true;
    }
 
    if (
        changedParams.includes('navigation') &&
        passedParams.navigation &&
        (passedParams.navigation.prevEl || prevEl) &&
        (passedParams.navigation.nextEl || nextEl) &&
        (currentParams.navigation || currentParams.navigation === false) &&
        navigation &&
        !navigation.prevEl &&
        !navigation.nextEl
    ) {
        needNavigationInit = true;
    }
 
    const destroyModule = (mod) => {
        if (!swiper[mod]) return;
        swiper[mod].destroy();
        if (mod === 'navigation') {
            currentParams[mod].prevEl = undefined;
            currentParams[mod].nextEl = undefined;
            swiper[mod].prevEl = undefined;
            swiper[mod].nextEl = undefined;
        } else {
            currentParams[mod].el = undefined;
            swiper[mod].el = undefined;
        }
    };
 
    updateParams.forEach((key) => {
        if (isObject(currentParams[key]) && isObject(passedParams[key])) {
            extend(currentParams[key], passedParams[key]);
        } else {
            const newValue = passedParams[key];
            if (
                (newValue === true || newValue === false) &&
                (key === 'navigation' || key === 'pagination' || key === 'scrollbar')
            ) {
                if (newValue === false) {
                    destroyModule(key);
                }
            } else {
                currentParams[key] = passedParams[key];
            }
        }
    });
    // if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {
    //     virtual.update();
    // }
    if (changedParams.includes('children') && virtual && currentParams.virtual.enabled) {
        // virtual.slides = slides;
        virtual.update(true);
    } else if (changedParams.includes('children') && swiper.lazy && swiper.params.lazy.enabled) {
        swiper.lazy.load();
    }
 
    if (needThumbsInit) {
        const initialized = thumbs.init();
        if (initialized) thumbs.update(true);
    }
 
    if (needControllerInit) {
        swiper.controller.control = currentParams.controller.control;
    }
 
    if (needPaginationInit) {
        if (paginationEl) currentParams.pagination.el = paginationEl;
        pagination.init();
        pagination.render();
        pagination.update();
    }
 
    if (needScrollbarInit) {
        if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;
        scrollbar.init();
        scrollbar.updateSize();
        scrollbar.setTranslate();
    }
 
    if (needNavigationInit) {
        if (nextEl) currentParams.navigation.nextEl = nextEl;
        if (prevEl) currentParams.navigation.prevEl = prevEl;
        navigation.init();
        navigation.update();
    }
 
    if (changedParams.includes('allowSlideNext')) {
        swiper.allowSlideNext = passedParams.allowSlideNext;
    }
    if (changedParams.includes('allowSlidePrev')) {
        swiper.allowSlidePrev = passedParams.allowSlidePrev;
    }
    if (changedParams.includes('direction')) {
        swiper.changeDirection(passedParams.direction, false);
    }
    swiper.update();
}
export {
    updateSwiper
};