@@ -12,6 +12,7 @@ export default function Virtual({ swiper, extendParams, on, emit }) {
1212 enabled : false ,
1313 slides : [ ] ,
1414 cache : true ,
15+ slidesPerViewAutoSlideSize : 320 ,
1516 renderSlide : null ,
1617 renderExternal : null ,
1718 renderExternalUpdate : true ,
@@ -65,16 +66,16 @@ export default function Virtual({ swiper, extendParams, on, emit }) {
6566
6667 function update ( force , beforeInit , forceActiveIndex ) {
6768 const {
68- slidesPerView,
6969 slidesPerGroup,
7070 centeredSlides,
71+ slidesPerView,
7172 loop : isLoop ,
7273 initialSlide,
7374 } = swiper . params ;
7475 if ( beforeInit && ! isLoop && initialSlide > 0 ) {
7576 return ;
7677 }
77- const { addSlidesBefore, addSlidesAfter } = swiper . params . virtual ;
78+ const { addSlidesBefore, addSlidesAfter, slidesPerViewAutoSlideSize } = swiper . params . virtual ;
7879 const {
7980 from : previousFrom ,
8081 to : previousTo ,
@@ -93,14 +94,31 @@ export default function Virtual({ swiper, extendParams, on, emit }) {
9394 if ( swiper . rtlTranslate ) offsetProp = 'right' ;
9495 else offsetProp = swiper . isHorizontal ( ) ? 'left' : 'top' ;
9596
97+ let slidesPerViewNumeric ;
98+ if ( slidesPerView === 'auto' ) {
99+ if ( slidesPerViewAutoSlideSize ) {
100+ let swiperSize = swiper . size ;
101+ if ( ! swiperSize ) {
102+ swiperSize = swiper . isHorizontal ( )
103+ ? swiper . el . getBoundingClientRect ( ) . width
104+ : swiper . el . getBoundingClientRect ( ) . height ;
105+ }
106+ slidesPerViewNumeric = Math . max ( 1 , Math . ceil ( swiperSize / slidesPerViewAutoSlideSize ) ) ;
107+ } else {
108+ slidesPerViewNumeric = 1 ;
109+ }
110+ } else {
111+ slidesPerViewNumeric = slidesPerView ;
112+ }
113+
96114 let slidesAfter ;
97115 let slidesBefore ;
98116 if ( centeredSlides ) {
99- slidesAfter = Math . floor ( slidesPerView / 2 ) + slidesPerGroup + addSlidesAfter ;
100- slidesBefore = Math . floor ( slidesPerView / 2 ) + slidesPerGroup + addSlidesBefore ;
117+ slidesAfter = Math . floor ( slidesPerViewNumeric / 2 ) + slidesPerGroup + addSlidesAfter ;
118+ slidesBefore = Math . floor ( slidesPerViewNumeric / 2 ) + slidesPerGroup + addSlidesBefore ;
101119 } else {
102- slidesAfter = slidesPerView + ( slidesPerGroup - 1 ) + addSlidesAfter ;
103- slidesBefore = ( isLoop ? slidesPerView : slidesPerGroup ) + addSlidesBefore ;
120+ slidesAfter = slidesPerViewNumeric + ( slidesPerGroup - 1 ) + addSlidesAfter ;
121+ slidesBefore = ( isLoop ? slidesPerViewNumeric : slidesPerGroup ) + addSlidesBefore ;
104122 }
105123 let from = activeIndex - slidesBefore ;
106124 let to = activeIndex + slidesAfter ;
0 commit comments