Skip to content

Commit c82b48a

Browse files
authored
Merge pull request #527 from ismail9k/devin/1752663881-fix-critical-issues
Fix critical issues: mobile scrolling, auto mode crash, and wrapAround itemsToScroll
2 parents cb11564 + b79e73f commit c82b48a

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

src/components/Carousel/Carousel.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -702,13 +702,17 @@ export const Carousel = defineComponent({
702702
let accumulatedSize = 0
703703
let index = 0 - clonedSlidesCount.value.before
704704
const offset = Math.abs(scrolledOffset.value + clonedSlidesOffset.value)
705+
let iterations = 0
706+
const maxIterations = slides.length * 2
705707

706-
while (accumulatedSize <= offset) {
708+
while (accumulatedSize <= offset && iterations < maxIterations) {
707709
const normalizedIndex =
708710
((index % slides.length) + slides.length) % slides.length
709-
accumulatedSize +=
710-
slidesRect.value[normalizedIndex]?.[dimension.value] + config.gap
711+
const slideSize = slidesRect.value[normalizedIndex]?.[dimension.value] || 0
712+
if (slideSize <= 0) break
713+
accumulatedSize += slideSize + config.gap
711714
index++
715+
iterations++
712716
}
713717
minIndex = index - 1
714718
}
@@ -717,6 +721,9 @@ export const Carousel = defineComponent({
717721
{
718722
let index = minIndex
719723
let accumulatedSize = 0
724+
let iterations = 0
725+
const maxIterations = slides.length * 2
726+
720727
if (index < 0) {
721728
accumulatedSize =
722729
slidesRect.value
@@ -731,12 +738,14 @@ export const Carousel = defineComponent({
731738
Math.abs(scrolledOffset.value)
732739
}
733740

734-
while (accumulatedSize < viewportRect.value[dimension.value]) {
741+
while (accumulatedSize < viewportRect.value[dimension.value] && iterations < maxIterations) {
735742
const normalizedIndex =
736743
((index % slides.length) + slides.length) % slides.length
737-
accumulatedSize +=
738-
slidesRect.value[normalizedIndex]?.[dimension.value] + config.gap
744+
const slideSize = slidesRect.value[normalizedIndex]?.[dimension.value] || 0
745+
if (slideSize <= 0) break
746+
accumulatedSize += slideSize + config.gap
739747
index++
748+
iterations++
740749
}
741750
maxIndex = index - 1
742751
}

src/composables/useDrag.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export function useDrag(options: UseDragOptions) {
5454

5555
const moveEvent = isTouch ? 'touchmove' : 'mousemove'
5656
const endEvent = isTouch ? 'touchend' : 'mouseup'
57-
document.addEventListener(moveEvent, handleDrag, { passive: false })
57+
document.addEventListener(moveEvent, handleDrag, { passive: isTouch })
5858
document.addEventListener(endEvent, handleDragEnd, { passive: true })
5959

6060
options.onDragStart?.()

src/utils/calculateAverage.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
export function calculateAverage(numbers: number[]) {
22
if (numbers.length === 0) return 0
3-
const sum = numbers.reduce((acc, num) => acc + num, 0)
4-
return sum / numbers.length
3+
const validNumbers = numbers.filter(num => typeof num === 'number' && !isNaN(num) && isFinite(num))
4+
if (validNumbers.length === 0) return 0
5+
const sum = validNumbers.reduce((acc, num) => acc + num, 0)
6+
return sum / validNumbers.length
57
}

0 commit comments

Comments
 (0)