From 2dae84fa4d65c4a9d319a6fe086877ab7a2724c5 Mon Sep 17 00:00:00 2001 From: Vladimir Kharlampidi Date: Sat, 26 Feb 2022 14:21:37 +0300 Subject: [PATCH] feat(virtual): better support for effects rather than `slide` --- src/modules/virtual/virtual.js | 6 +++++- src/shared/effect-init.js | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/modules/virtual/virtual.js b/src/modules/virtual/virtual.js index d5f2b420b..c2dba593e 100644 --- a/src/modules/virtual/virtual.js +++ b/src/modules/virtual/virtual.js @@ -1,7 +1,7 @@ import $ from '../../shared/dom.js'; import { setCSSProperty } from '../../shared/utils.js'; -export default function Virtual({ swiper, extendParams, on }) { +export default function Virtual({ swiper, extendParams, on, emit }) { extendParams({ virtual: { enabled: false, @@ -88,6 +88,7 @@ export default function Virtual({ swiper, extendParams, on }) { if (swiper.lazy && swiper.params.lazy.enabled) { swiper.lazy.load(); } + emit('virtualUpdate'); } if (previousFrom === from && previousTo === to && !force) { @@ -95,6 +96,7 @@ export default function Virtual({ swiper, extendParams, on }) { swiper.slides.css(offsetProp, `${offset}px`); } swiper.updateProgress(); + emit('virtualUpdate'); return; } if (swiper.params.virtual.renderExternal) { @@ -112,6 +114,8 @@ export default function Virtual({ swiper, extendParams, on }) { }); if (swiper.params.virtual.renderExternalUpdate) { onRendered(); + } else { + emit('virtualUpdate'); } return; } diff --git a/src/shared/effect-init.js b/src/shared/effect-init.js index 3ab9229f9..d3c9e52ea 100644 --- a/src/shared/effect-init.js +++ b/src/shared/effect-init.js @@ -21,4 +21,17 @@ export default function effectInit(params) { if (swiper.params.effect !== effect) return; setTransition(duration); }); + + let requireUpdateOnVirtual; + on('virtualUpdate', () => { + if (!swiper.slides.length) { + requireUpdateOnVirtual = true; + } + requestAnimationFrame(() => { + if (requireUpdateOnVirtual && swiper.slides.length) { + setTranslate(); + requireUpdateOnVirtual = false; + } + }); + }); }