@@ -93,11 +93,15 @@ class _StackableCarousel {
9393 const clone = original . cloneNode ( true )
9494 clone . classList . add ( `stk-slide-clone-${ slideIndex + 1 } ` )
9595 clone . style . zIndex = - 1
96+
97+ clone . style . willChange = 'transform'
98+ clone . style . transform = 'translateX( 0 )'
9699 original . style . willChange = 'transform'
97100 original . style . transform = 'TranslateX( 0 )'
98101
99102 // prevents flickering when changing the value of TranslateX
100103 original . style . transition = 'transform 0s'
104+ clone . style . transition = 'transform 0s'
101105
102106 this . clones . push ( clone )
103107
@@ -117,11 +121,14 @@ class _StackableCarousel {
117121 }
118122 step ++
119123 } else if ( step === 2 ) {
120- const numSlides = this . slideEls . length
121- const slideClientRect = this . slideEls [ 0 ] . getBoundingClientRect ( )
122- const slideWidth = slideClientRect . width
124+ // Calculate the difference between the first slide and the first clone
125+ // This is used to calculate the translateX values for the slides and clones
126+ const slideOffsetLeft = this . slideEls [ 0 ] . offsetLeft
127+ const cloneOffsetLeft = this . clones [ 0 ] . offsetLeft
123128
124- this . slideTranslateX = `calc((${ slideWidth } px * ${ numSlides } ) + (var(--gap) * ${ numSlides } ))`
129+ const diff = Math . abs ( slideOffsetLeft - cloneOffsetLeft )
130+ this . slideTranslateX = ( this . isRTL ? - diff : diff ) + 'px'
131+ this . cloneTranslateX = ( this . isRTL ? diff : - diff ) + 'px'
125132
126133 step ++
127134 } else if ( step === 3 ) {
@@ -297,12 +304,12 @@ class _StackableCarousel {
297304 const needToSwap = this . needToSwapCount ( slide )
298305 let startIndex = 0
299306 let endIndex = 0
300- let slideTranslateXValue = 0
307+ let useSlideTranslateX = false
301308 if ( needToSwap > 0 && this . swappedSlides < needToSwap ) {
302309 startIndex = this . swappedSlides
303310 endIndex = needToSwap
304311
305- slideTranslateXValue = this . slideTranslateX
312+ useSlideTranslateX = true
306313
307314 this . swappedSlides = endIndex
308315 } else if ( this . swappedSlides > needToSwap ) {
@@ -317,7 +324,10 @@ class _StackableCarousel {
317324 const runSteps = ( ) => {
318325 if ( step === 0 ) {
319326 this . slideEls . slice ( startIndex , endIndex ) . forEach ( slide => {
320- slide . style . transform = `TranslateX(${ slideTranslateXValue } )`
327+ slide . style . transform = `translateX(${ useSlideTranslateX ? this . slideTranslateX : 0 } )`
328+ } )
329+ this . clones . slice ( startIndex , endIndex ) . forEach ( clone => {
330+ clone . style . transform = `translateX(${ useSlideTranslateX ? this . cloneTranslateX : 0 } )`
321331 } )
322332 step ++
323333 requestAnimationFrame ( runSteps )
0 commit comments