Skip to content

Commit b478058

Browse files
committed
feat(virtual): improve behavior with cssMode
1 parent ef228e6 commit b478058

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

src/core/slide/slideTo.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,13 @@ export default function slideTo(
143143
const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
144144
if (isVirtual) {
145145
swiper.wrapperEl.style.scrollSnapType = 'none';
146+
swiper._immediateVirtual = true;
146147
}
147148
wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
148149
if (isVirtual) {
149150
requestAnimationFrame(() => {
150151
swiper.wrapperEl.style.scrollSnapType = '';
152+
swiper._swiperImmediateVirtual = false;
151153
});
152154
}
153155
} else {

src/modules/virtual/virtual.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export default function Virtual({ swiper, extendParams, on }) {
1515
},
1616
});
1717

18+
let cssModeTimeout;
19+
1820
swiper.virtual = {
1921
cache: {},
2022
from: undefined,
@@ -49,7 +51,10 @@ export default function Virtual({ swiper, extendParams, on }) {
4951
slidesGrid: previousSlidesGrid,
5052
offset: previousOffset,
5153
} = swiper.virtual;
52-
swiper.updateActiveIndex();
54+
if (!swiper.params.cssMode) {
55+
swiper.updateActiveIndex();
56+
}
57+
5358
const activeIndex = swiper.activeIndex || 0;
5459

5560
let offsetProp;
@@ -176,7 +181,10 @@ export default function Virtual({ swiper, extendParams, on }) {
176181
const $cachedEl = cache[cachedIndex];
177182
const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
178183
if (cachedElIndex) {
179-
$cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
184+
$cachedEl.attr(
185+
'data-swiper-slide-index',
186+
parseInt(cachedElIndex, 10) + numberOfNewSlides,
187+
);
180188
}
181189
newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
182190
});
@@ -231,7 +239,14 @@ export default function Virtual({ swiper, extendParams, on }) {
231239
});
232240
on('setTranslate', () => {
233241
if (!swiper.params.virtual.enabled) return;
234-
update();
242+
if (swiper.params.cssMode && !swiper._immediateVirtual) {
243+
clearTimeout(cssModeTimeout);
244+
cssModeTimeout = setTimeout(() => {
245+
update();
246+
}, 100);
247+
} else {
248+
update();
249+
}
235250
});
236251
on('init update resize', () => {
237252
if (!swiper.params.virtual.enabled) return;

0 commit comments

Comments
 (0)