123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- 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
- };
|